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 /= i13 if n > 1:14 factors.append(n) 15 return factors16 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了《算法导论》
新闻热点
疑难解答