Link:
https://www.hackerrank.com/challenges/identify-smith-numbers
1 def sum_digits(n): 2 return sum(int(x) for x in str(n)) 3 4 def prime_factors(n): 5 factors = [] 6 for i in xrange(2, n): 7 if i*i > n: 8 break 9 elif n % i == 0: # 短除法核心 10 while n % i == 0: 11 factors.append(i) 12 n /= i 13 if n > 1: 14 factors.append(n) 15 return factors 16 17 n = int(raw_input()) 18 19 factors = prime_factors(n) 20 print '1' if len(factors) > 1 and sum_digits(n) == sum(sum_digits(x) for x in factors) else '0'
本题
“数论” -- “质因子分解”
学习到
如何理解(读)代码
哪里是代码的核心,哪里是代码的边缘可变的、灵活的
比如 n % i == 0 这里就是“短除法”的判断核心
而if i * i > n, 这种就是减少判断次数的外围
if和while层叠的顺序也是灵活可变的
算法整体
get了《算法导论》