我正在制作一个计算素数的程序,我看看我正在测试的剩余可能的素数以及我到目前为止的所有素数,但是如果我到达我正在比较PossPrime的点那就停止超过其平方根的任何东西。 (如果需要,我可以解释一下)。我不关心sqrt小数点后面的任何数字;有没有办法告诉Python不要费心计算?
并且,有没有办法将这个方面(只测试其下的素数,直到我到达sqrt)进入for
循环?
#There's some boring setup before here that isn't problematic.
while True:
PossWasDivis = False #initialize the var (used to convey if the possible prime was divis)
sqrtP = int(sqrt(PossPrime))
for iterationOfArray in range(2, sqrtP):
# print ("Comparing: (", PossPrime, "% (", GlobPrimeList [iterationOfArray],")) == 0")
if (PossPrime % (GlobPrimeList [iterationOfArray])) == 0:
# print(PossPrime, "was divisable by", GlobPrimeList[iterationOfArray],"! Breaking for loop")
PossWasDivis = True
break
if (GlobPrimeList [iterationOfArray]) > sqrtP:
break
if PossWasDivis == False: # Occurs when none of the tested #s are divis
GlobPrimeList.append (PossPrime)
f.write(str(PossPrime)+'\n')
#Switch between incramenting PossPrime between 2 and 4
if PossPrimeStat == 2:
PossPrimeStat = 4
PossPrime += 4
else: # if PossPrimeStat == 4:
PossPrimeStat = 2
PossPrime += 2
GlobPrimeList预装了一些素数以便开始使用,并且在我取消该程序之前会继续无限期地查找。
答案 0 :(得分:0)
我不关心sqrt小数点后面的任何数字;有没有办法告诉Python不要去计算它们?
不。
math.sqrt()
适用于浮点值。你得到的精确度就是数学。
Python确实包含"任意精度"的函数。数学,你可以指定你将获得多少精度...但这些函数比浮点值运算的函数慢得多。如果你想要更快的代码,你将使用浮点值,并且没有办法告诉Python不计算整个值。