|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
首先给大家道个歉,这两天事情较多,没能抽出整块时间看大家的答案,一直拖到今天晚上。
根据题目要求需在5.10 10:00之前完成。
原帖子:http://bbs.fishc.com/thread-71586-1-1.html
题目:
三角形数序列是由对自然数的连加构造而成的。所以第七个三角形数是 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. 那么三角形数序列中的前十个是:
1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...
下面我们列出前七个三角形数的约数:
1: 1
3: 1,3
6: 1,2,3,6
10: 1,2,5,10
15: 1,3,5,15
21: 1,3,7,21
28: 1,2,4,7,14,28
可以看出 28 是第一个拥有超过 5 个约数的三角形数。
那么第一个拥有超过 500 个约数的三角形数是多少?
本题的正确答案是:76576500
答题正确的鱼油是:
小火木 6.93s
EggyBruch 16.8s
DingRan 30.9s
bacon6581 10.4s 10行的逗号是中文标点!
lingtingliushen 5.8s
holdme 8.56s
优秀的鱼油是 lingtingliushen
以下鱼油为限定完成时间结束后完成或修改的:
老忘 1.14s
zooo 6.19s pp我没安装成功,所以没测试
挥舞乾坤 3.89s
小剑剑 13.27s
此外 vpo1 和 宝贝归来 运算时间过长
我写的程序如下,供参考: from math import sqrt
from itertools import combinations
def tri(n): #三角形数
return n * (n + 1) // 2
def length(mylist):
len1 = 0
for i in range(len(mylist)):
a =combinations(mylist, i + 1)
b = list(set(a))
len1 += len(b)
return len1 + 2
#生成质数列表
primeList = [2]
item = 101
n = 3
while len(primeList) < item:
for i in primeList:
if n % i == 0: break
if i > sqrt(n):
primeList.append(n)
break
n += 2
n = 15
while True:
list1 = []
num = tri(n)
num1 = num
for i in primeList:
while True:
if num1 % i == 0:
num1 //= i
list1.append(i)
else:
break
if num1 == 1:
break
if length(list1) > 500:
print(num)
break
n += 1
|
|