Link:
https://www.hackerrank.com/challenges/identify-smith-numbers
1defsum_digits(n):2returnsum(int(x)forxinstr(n))34defPRime_factors(n):5factors =[]6foriinxrange(2, n):7ifi*i >n:8
break9elifn % i == 0:#短除法核心10whilen % i ==0:11factors.append(i)12n /=i13ifn > 1:14factors.append(n)15returnfactors1617n =int(raw_input())1819factors =prime_factors(n)20print'1'iflen(factors) > 1andsum_digits(n) == sum(sum_digits(x)forxinfactors)else'0'
本题
“数论” -- “质因子分解”
学习到
如何理解(读)代码
哪里是代码的核心,哪里是代码的边缘可变的、灵活的
比如 n % i == 0 这里就是“短除法”的判断核心
而if i * i > n, 这种就是减少判断次数的外围
if和while层叠的顺序也是灵活可变的
算法整体
get了《算法导论》