Identify Smith Numbers

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了《算法导论》

转载于:https://www.cnblogs.com/sangocare/p/4509176.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值