[白俊]4673号:セルフサービス番号

3551 ワード

白駿4673号
セルフサービス番号は1949年にインドの数学者D.R.Kaprekarによって命名された.正の整数nについて、d(n)が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となります.
このようにして、次の数の列を生成できます.
33, 39, 51, 57, 69, 84, 96, 111, 114, 120, 123, 129, 141, ...
arr = [0] * 10100

for i in range(1, 10001):
    num = i
    total = i
    if(arr[i] != 1):
      while 1:
        while(num > 0):          
          total += num % 10
          num = num // 10
        arr[total] = 1
        if(total >= 10000): break
        num = total
for i in range(1, 10000):
    if(arr[i] != 1): print(i)
iが2の時4 8 16...ずっとやってarrを1埋め尽くして、10なら10+1+0~11,11+1~13,13+1+3~17…さらにarrを1に満タンにします.そして最後に出力したのは1ではありません.