使用完整的数字而不是 525.31e+10
Using the full number instead of 525.31e+10
我写了一个可以找到素数的程序。
from time import sleep
soNotPrimes = []
n = input("Start finding primes at: ")
n = int(n)
k = 2
found_factors = 0
nSQRT = n**0.5
while True:
kinn = n/k
if found_factors == 1:
print("Okay, look man, I totally found a non-prime number. It's", n)
n += 1
k = 2
found_factors = 0
nSQRT = n**0.5
continue
if (k > nSQRT) and found_factors == 0:
print("Oh yeah man, I found a prime!", n)
n += 1
k = 2
found_factors = 0
nSQRT = n**0.5
continue
if kinn.is_integer():
found_factors += 1
k += 1
然而,这不起作用,因为如果数字足够大,Python 开始将它们解释为,例如,525.31e+10。这将始终等于 5253100000000,它不是质数,因为它是偶数。有没有办法让 Python 按字面解释这些数字?
我无法重现您的问题,但一般来说,我们希望避免浮点数渗入我们的结果和比较中。您的代码中有两个地方会发生这种情况:
kinn = n/k
我们可以将其替换为模数 %
以获得整数余数而不是浮点数,并且:
nSQRT = n**0.5
我们可以通过对等式两边进行平方来将 k
的平方与 n
进行比较来代替,并避免浮点数。针对上述内容修改代码并稍微简化我们得到:
n = int(input("Start finding primes at: "))
k = 2
while True:
if n % k == 0:
print("Okay, look man, I totally found a non-prime number. It's", n)
n += 1
k = 2
continue
elif k * k > n:
print("Oh yeah man, I found a prime!", n)
n += 1
k = 2
continue
k += 1
看看上面的方法是否更适合你。您仍然需要微调代码以正确处理 2 或更少的起始数字。
我写了一个可以找到素数的程序。
from time import sleep
soNotPrimes = []
n = input("Start finding primes at: ")
n = int(n)
k = 2
found_factors = 0
nSQRT = n**0.5
while True:
kinn = n/k
if found_factors == 1:
print("Okay, look man, I totally found a non-prime number. It's", n)
n += 1
k = 2
found_factors = 0
nSQRT = n**0.5
continue
if (k > nSQRT) and found_factors == 0:
print("Oh yeah man, I found a prime!", n)
n += 1
k = 2
found_factors = 0
nSQRT = n**0.5
continue
if kinn.is_integer():
found_factors += 1
k += 1
然而,这不起作用,因为如果数字足够大,Python 开始将它们解释为,例如,525.31e+10。这将始终等于 5253100000000,它不是质数,因为它是偶数。有没有办法让 Python 按字面解释这些数字?
我无法重现您的问题,但一般来说,我们希望避免浮点数渗入我们的结果和比较中。您的代码中有两个地方会发生这种情况:
kinn = n/k
我们可以将其替换为模数 %
以获得整数余数而不是浮点数,并且:
nSQRT = n**0.5
我们可以通过对等式两边进行平方来将 k
的平方与 n
进行比较来代替,并避免浮点数。针对上述内容修改代码并稍微简化我们得到:
n = int(input("Start finding primes at: "))
k = 2
while True:
if n % k == 0:
print("Okay, look man, I totally found a non-prime number. It's", n)
n += 1
k = 2
continue
elif k * k > n:
print("Oh yeah man, I found a prime!", n)
n += 1
k = 2
continue
k += 1
看看上面的方法是否更适合你。您仍然需要微调代码以正确处理 2 或更少的起始数字。