我正在尝试学习Python编程,而且我对此非常陌生。
我在打印一系列素数从一到百时遇到了问题。我无法弄清楚我的代码有什么问题。
这是我写的; 它打印所有奇数而不是素数:
for num in range(1,101):
for i in range(2,num):
if (num%i==0):
break
else:
print(num)
break
发布于 2018-09-26 14:38:13
break
结束它当前所处的循环。所以,你只是检查它是否可以被2整除,给你所有的奇数。
for num in range(2,101):
for i in range(2,num):
if (num%i==0):
break
else:
print(num)
话虽如此,有更好的方法在python中找到素数而不是这个。
for num in range(2,101):
if is_prime(num):
print(num)
def is_prime(n):
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0:
return False
return True
发布于 2018-09-26 15:17:31
希腊数学家Eratosthenes在两千多年前发明的一种更好的方法,不是试验分裂,而是通过反复抛出多个素数来筛选。
首先列出从2到最大期望素数的所有数字。然后重复取最小的未交叉数,并将其全部交叉掉; 保持未交叉的数字是素数。
例如,考虑小于30的数字。最初,2被识别为素数,然后4,6,8,10,12,14,16,18,20,22,24,26,28和30被划掉。接下来3被识别为素数,然后划掉6,9,12,15,18,21,24,27和30。下一个素数是5,所以10,15,20,25和30被划掉。等等。剩下的数字是素数:2,3,5,7,11,13,17,19,23和29。
def primes(n):
sieve = [True] * (n+1)
for p in range(2, n+1):
if (sieve[p]):
print p
for i in range(p, n+1, p):
sieve[i] = False
筛网的优化版本分别处理2并仅筛选奇数。此外,由于所有小于当前素数的平方的复合物被较小的素数划掉,内环可以从p ^ 2而不是p开始,外环可以在n的平方根处停止。我将保留优化版本供您使用。
https://stackoverflow.com/questions/-100002751
复制相似问题