## 【32】Pandigital products泛位數的乘積
若一個n位元數包含了數字1到n且各僅一次話,就稱之為「Pandigital products」。例如,5位數15234是一個包含1到5各一次,是泛位數的。
7254是一個不同尋常的積,因為39 × 186 = 7254,其中,被乘數丶乘數和積,是泛位數的,包含了數位1到9。
請找出像上面的7254那樣能表示成泛位數的乘積等式的所有積的和。
提示:有些數字能表示成多種乘積的形式,小心不要重複累加。
#### 分析:二位數乘二位數最多得到四位數,而三位數乘三位數最少得到五位數,這都排除形成1到9的Pandigital products,那麼2位數乘3位數最有可能,先處理完,最後再來探討1位數乘4位數得到4位數的可能情形。
### 第1個想法:迴圈產生axb=c

為何是123?
#這樣a需要避開22,33,44...,b需要避開133,144,...,229,…,535,....太多了
### 第2個想法:假設a1a2xb1b2b3=c,主動避開a1,a2,b1,b2,b3相同數字

#這樣產生a1,a2,b1,b2,b3五數確實倆倆不同,但是……
### 第3個想法:那就先跑完迴圈再把條件不合的剔除

#剩下問題就是怎摸剔除不要的結果。
### 練習1:判斷某一個指定元素是否在集合中,如果有,將此元素移除。

### 第4個想法:能不能用縮減的方法來處理問題,先設一個串列[1,2,3,4,5,6,7,8,9],在迴圈中逐次用掉,類似下面程式

一個簡單的實驗:

會出現TypeError: 'NoneType' object is not iterable。看來這種想法不行!
經過上面4種方法討論,我們採取第3種方法,也許同學還可以自己找到更好的方法!
### 練習2:寫一個函式將一個四位數c,切開成C1 C2 C3 C4,
例如c=7254切成C1=7,C2=2,C3=5,C4=4

<--有錯,不要照抄喔
### 練習3:引用operator套件,使用operator.eq比較兩個串列是否相等。

#配合sorted,可以先排序在比對。
### 練習4:指令len(L)可以求出L的長度,假設L=[111,222,444,555],利用append加入新的元素請判斷333和444,如果已經在L中重複,就不要加入,最後求出L內所有元素合。

計算總合有2種方法:

練習1中用了list刪除元素的方法L.remove(),你可以先假設一個L1=[1,2,3,4,5,6,7,8,9],然後逐次將a1,a2,b1,b2,b3刪除,剩下4個元素和L2=[C1,C2,C3,C4]作比對,記得要先用練習3的方法排序過,也可以L1和[a1,a2,b1,b2,b3,C1,C2,C3,C4]直接比對喔。
練習2函式中,如果增加一個傳回值,當裡面C1 C2 C3 C4的4個值都不相同則傳回True,會有利於最後的整合喔!練習4:算出來的c值,有很多個,可能有重複的,直接加總的話,重複了也不知道,假設用list收集,可用not in指令來判斷是否重複了,就是練習4喔。
## 請找出像上面的7254那樣能表示成泛位數的乘積等式的所有積的和。