self-number

1949年印度數學家 D.R Kaprekar發現了一種數字:Self-numbers。對任何正整數 n ,定義d(n)n加上其各數字的和。例如:d(75)=75+7+5=87。給任一個正整數 n 當作一個起始點,你可以產生無限的數字序列:n, d(n), d(d(n)), d(d(d(n))),…例如:如果你從33開始,下一個數字是33+3+3=39,再下一個數字是39+3+9=51,再下一個數字是51+5+1=57。所以你可以產生以下的序列:(1.請你利用函數的方式,列出<10000的所有數列)
此數列為:33, 39, 51, 57, 69, 84, 96,111, 114, 120, 123, 129, 141, ……

我們稱nd(n)generator。在上面的例子中3339generator3951generator5157generator,以下類推。有些數有不只一個generator,例如:1012generators91100。如果一個數沒有generator,那他就是一個self-number。比100小的self-number1, 3, 5, 7, 9, 20, 31, 42, 53, 64, 75, 86, 97

請你根據上面的定義,2.找出所有小於或等於10000self-numbers

 

2.解法:篩選法

1.開一陣列a[10000],代表我們所有元素。預設值為0。

1

2

3

4

5

6

7

8

9

10

…………

9999

0

0

0

0

0

0

0

0

0

0

 

0

2.讓 i= 1 to 10000

1

2

3

4

5

6

7

8

9

10

…………

9999

0

1

0

1

0

1

0

1

0

0

 

0

 

3.列印出所有a[i]=0的i,即為所有<10000的Self-Number。