Python实现欧拉计划23题

def d(i):
    k=0                      #判断一个数(小于28123)是否写成两个过剩数的和,不能的话返回为真
    for m in range(0,len(M)):
        for n in range(0,len(M)):             #M为小于28123的所有的过剩数
            if i==M[m]+M[n]:
                return 1
                k=1
                break
    if k==0:
        return 0


#求M,所有小于M的过剩数


M=[]
for x in range(1,28123):
    s=0
    for y in  range(1,x):
        if x%y==0:
            s=s+y
    if s>x:
        M.append(x)
print M


L=[]
for i in range(1,28123):
    if d(i)==0:
        L.append(i)

print sum(L)


======================================


def abun(N):
    Q = dict.fromkeys(range(1,N+1), 0) 
    for q in Q:
        for k in [q*n for n in range(1,N/q+1) ]:
            if q!=k: Q[k] += q
    return [ q  for q in Q if Q[q]>q]


N = 20161; A = abun(N); possible = set() 
for a in A:
    for b in A:
        if a+b < N: possible.add( a+b )
        else: break
        
print sum([p for p in range(N) if p not in possible])



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值