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了《算法導論》
新聞熱點
疑難解答