如何使用for循环计算素数
how to use for loop to calculate a prime number
for i in range(2, 101):
for j in range(2, i):
if (i % j) == 0:
print(i,"is a composite number")
break
我尝试制作 if (i%j) != 0:
但它不起作用(4 不是质数)
您可以像这样修复您的原始算法:
for i in range(2, 101):
if all([(i % j) for j in range(2, i)]):
print(i,"is a prime number")
一般来说,在这种情况下,您最好 using/learning 使用已建立的算法。这是一个著名算法的 Python 实现(代码的 Sieve of Eratosthenes) for generating the first n
primes (credit to tech.io):
def sieve(n):
primes = 2*[False] + (n-1)*[True]
for i in range(2, int(n**0.5+1.5)):
for j in range(i*i, n+1, i):
primes[j] = False
return [prime for prime, checked in enumerate(primes) if checked]
一些测试输出:
print(sieve(100))
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
您使用的 for
循环对于查找素数是正确的。我只想给它另一个条件:if i > 1:
。此外,您还需要打印质数
for i in range(2, 101):
if i > 1: # Prime numbers are greater than 1
for j in range(2, i):
if (i % j) == 0:
print(i,"is a composite number")
break
else:
print(i,"is a prime number")
for i in range(2, 101):
for j in range(2, i):
if (i % j) == 0:
print(i,"is a composite number")
break
我尝试制作 if (i%j) != 0:
但它不起作用(4 不是质数)
您可以像这样修复您的原始算法:
for i in range(2, 101):
if all([(i % j) for j in range(2, i)]):
print(i,"is a prime number")
一般来说,在这种情况下,您最好 using/learning 使用已建立的算法。这是一个著名算法的 Python 实现(代码的 Sieve of Eratosthenes) for generating the first n
primes (credit to tech.io):
def sieve(n):
primes = 2*[False] + (n-1)*[True]
for i in range(2, int(n**0.5+1.5)):
for j in range(i*i, n+1, i):
primes[j] = False
return [prime for prime, checked in enumerate(primes) if checked]
一些测试输出:
print(sieve(100))
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
您使用的 for
循环对于查找素数是正确的。我只想给它另一个条件:if i > 1:
。此外,您还需要打印质数
for i in range(2, 101):
if i > 1: # Prime numbers are greater than 1
for j in range(2, i):
if (i % j) == 0:
print(i,"is a composite number")
break
else:
print(i,"is a prime number")