这是问题文本:
希尔伯特数是整数k≥0k≥0时形式为4k + 14k + 1的任何正整数。我们将一个无平方的希尔伯特数定义为希尔伯特数,该数不能被除了一个以外的任何希尔伯特数的平方整除。例如,117117是平方自由希尔伯特数,等于9×139×13。然而62376237是希尔伯特数,在这个意义上不是无平方,因为它可以被9292整除。数字39693969也不是无平方,因为它可以被9292和212212整除。
有23271922327192平方自由希尔伯特数低于107107。 在10161016以下有多少平方免费希尔伯特数?
以下是我的代码。我怎样才能让它更快?
from math import sqrt
def if_squarefree(x):
i = 1
maybe = 0
while maybe < int(sqrt(x)) + 1 :
tmp = 4 * i + 1
maybe = tmp * tmp
if x % maybe == 0 :
return False
i = i + 1
return True
def find_squarefree() :
end = pow(10,16)
i = pow(10,7)
cnt = 0
while i < end :
print i
tmp = 4 * i + 1
if if_squarefree(tmp) :
cnt = cnt + 1
i = i + 1
return cnt
find_squarefree()
谢谢你:)
答案 0 :(得分:0)
我认为你错了。尝试运行此程序:
from __future__ import absolute_import, division, print_function
from datetime import datetime
start = datetime.utcnow()
i = 0
while True:
i += 1
if i % 10**7 == 0:
print(i)
print((datetime.utcnow() - start ).total_seconds())
请注意计算10**7
又名pow(10,7)
需要多长时间。现在想象一下如何计算pow(10,16)。
这只是while i < end
循环中的计数 - 这是在if_squrefree()
在我的盒子上。从1开始计数 - > 1000000需要1.4秒。通过数学 从1开始计数 - > 100亿将需要〜45年。因此,这种方法不起作用。