鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: 冬雪雪冬

[技术交流] 小练习:20160620 算出所有不能写成两个过剩数之和的正整数之和

[复制链接]
发表于 2016-6-26 10:12:33 | 显示全部楼层
本帖最后由 小剑剑 于 2016-6-26 10:15 编辑
  1. import time
  2. begin=time.clock()
  3. a=list(filter(lambda x: sum([i  for  i in range(1,x) if not x%i])>x , range(28111)))
  4. b=list(set([i+ii for i in a for ii in a if i+ii<28123]))
  5. c=[i for i in range(1,28123) if i not in b]
  6. d=sum(c)
  7. end=time.clock()
  8. print(end-begin,d)
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
冬雪雪冬 + 5 + 5 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-26 20:35:36 | 显示全部楼层
  1. import math
  2. import time
  3. start = time.perf_counter()
  4. def truefactor(n):
  5.             fac_list = [1]
  6.             sum1 = 0
  7.             halfnum = n // 2 + 1
  8.             for i in range(2, halfnum):
  9.                         if n % i == 0:
  10.                                     fac_list.append(i)
  11.             sum1 = sum(fac_list)
  12.             if sum1 > n:
  13.                         return True
  14.             else:
  15.                         return False

  16. def getfactor():
  17.             factorlist = []
  18.             factorlist1 = []
  19.             sum_allintegers = 0
  20.             sum_allfactors = 0

  21.             #获得所有的过剩数
  22.             for n in range(1, 28124):
  23.                         sum_allintegers += n
  24.                         if truefactor(n):
  25.                                     factorlist.append(n)

  26.             #获得过剩数相加的和,然后得到过剩数之和,总和减去过去过剩数之后为所有不是过剩数的正整数之和
  27.             length = len(factorlist)
  28.             for i in range(length):
  29.                         for j in range(length):
  30.                                     a = factorlist[i] + factorlist[j]
  31.                                     if  a > 28123:
  32.                                                 break
  33.                                     else:
  34.                                                 factorlist1.append(a)                        
  35.             factorlist1 = sorted(list(set(factorlist1)))
  36.             sum_allfactors = sum(factorlist1)
  37.             return sum_allintegers - sum_allfactors
  38.                         
  39. print(getfactor())
  40. print('Running time is %s Seconds' %(time.perf_counter() - start))
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
冬雪雪冬 + 5 + 5 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-26 21:57:59 | 显示全部楼层
本帖最后由 bacon6581 于 2016-6-26 22:01 编辑
  1. from time import time
  2. start=time()

  3. lst=[]
  4. for i in range(12,28124):
  5.     l=[1]
  6.     j=i**0.5
  7.     if j==int(j):
  8.         l.append(j)
  9.     else:
  10.         j=int(j)+1

  11.     for x in range(2,int(j)):
  12.         if i%x==0:
  13.             l.append(x)
  14.             l.append(i/x)

  15.     sm=0
  16.     for each in l:
  17.         sm+=each

  18.     if sm>i:
  19.         lst.append(i)

  20. #print(lst)

  21. lst1=list(range(1,28124))
  22. for m in lst:
  23.     for n in range(lst.index(m),len(lst)):
  24.         if m+lst[n]>28124:
  25.             break
  26.         if m + lst[n] in lst1:
  27.             lst1.remove(m + lst[n])

  28. result=0
  29. for each in lst1:
  30.     result+=each
  31. print(result)
  32. print(time()-start)
复制代码


无标题.jpg

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
冬雪雪冬 + 5 + 5 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-6-29 15:47:00 | 显示全部楼层

为什么是20612不是28123啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-7-1 15:54:10 | 显示全部楼层
小剑剑 发表于 2016-6-29 15:47
为什么是20612不是28123啊

百度一下盈数,有介绍
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-7-1 20:44:21 | 显示全部楼层
我仿佛看到一尊大神。。。是不是数学不好的基本和编程无缘的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-19 21:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表