---
# System prepended metadata

title: Untitled

---

## 【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
![](https://i.imgur.com/SXJKqkx.png)
為何是123？
#這樣a需要避開22,33,44...，b需要避開133,144,...,229,…,535,....太多了
### 第2個想法：假設a1a2xb1b2b3=c，主動避開a1,a2,b1,b2,b3相同數字
![](https://i.imgur.com/UsqS9YM.png)
	 
#這樣產生a1,a2,b1,b2,b3五數確實倆倆不同，但是……
 
### 第3個想法：那就先跑完迴圈再把條件不合的剔除
![](https://i.imgur.com/cpbeJMg.png)
 
#剩下問題就是怎摸剔除不要的結果。

### 練習1：判斷某一個指定元素是否在集合中，如果有，將此元素移除。
![](https://i.imgur.com/xJi9YK9.png)
	 
### 第4個想法：能不能用縮減的方法來處理問題，先設一個串列[1,2,3,4,5,6,7,8,9]，在迴圈中逐次用掉，類似下面程式
![](https://i.imgur.com/QElNn94.png)
 
	一個簡單的實驗：
![](https://i.imgur.com/tQ2w31Q.png)


	 
會出現TypeError: 'NoneType' object is not iterable。看來這種想法不行！

經過上面４種方法討論，我們採取第３種方法，也許同學還可以自己找到更好的方法！

### 練習2：寫一個函式將一個四位數ｃ，切開成C1 C2 C3 C4，
例如c=7254切成C1=7，C2=2，C3=5，C4=4
![](https://i.imgur.com/LXqwPsz.png)

	 <--有錯，不要照抄喔

### 練習3：引用operator套件，使用operator.eq比較兩個串列是否相等。
![](https://i.imgur.com/yblA82n.png)
 		 
#配合sorted，可以先排序在比對。

### 練習4：指令len(L)可以求出L的長度，假設L=[111,222,444,555]，利用append加入新的元素請判斷333和444，如果已經在L中重複，就不要加入，最後求出L內所有元素合。
![](https://i.imgur.com/MAOLzMO.png)
	   
	計算總合有2種方法：
 		 
![](https://i.imgur.com/MuAeEtp.png)

練習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那樣能表示成泛位數的乘積等式的所有積的和。


