此代码有什么问题?仅使用循环和if语句打印素数
import math
y=1
z=y
while z>= 1 and z<1000 :
z= 2*y + 1
y=y+1
for a in range (2,int(math.sqrt(z) + 1)):
if z%a != 0:
print(z)
else:
break
这里有什么问题?我不断收到复合数字。
此代码有什么问题?仅使用循环和if语句打印素数
import math
y=1
z=y
while z>= 1 and z<1000 :
z= 2*y + 1
y=y+1
for a in range (2,int(math.sqrt(z) + 1)):
if z%a != 0:
print(z)
else:
break
这里有什么问题?我不断收到复合数字。
对于ž是一个素数,它必须是不存在任何数量的情况下,这样2 <= a <= sqrt(z)
和一个是ž的一个因素。我会将您的代码更改为:
import math
y=1
z=y
while z>= 1 and z<1000 :
z= 2*y + 1
y=y+1
if all(z%a != 0 for a in range (2,int(math.sqrt(z) + 1))):
print(z)
即使打印号码不能被一个数字整除,但可被另一个数字整除。
打印应该在循环之外。
import math
y=1
z=y
while z>= 1 and z<1000 :
z= 2*y + 1
y=y+1
flag=0
for a in range (2,int(math.sqrt(z) + 1)):
if z%a == 0:
flag=1
break
if flag==0:
print z
,以提高你的算法将是6的倍数为移动和检查是multipleofsix-1
和multiple of six+1
这会给你一个更好的效率数的另一种方式。除2和3外,所有其他素数都可以在该范围内找到。
进一步的改进将要求您维护一个数组并存储所有先前的素数,并且只将其除以所检查数字的平方根以下的所有素数。
还有更好的即兴创作,如Eratosthenes和Atkins的筛选,但这些是您可以实现的最基本的。
我无法获得您的国旗声明...... ???我是一个初学者,我onli knw ..如果语句,while循环.. – sidchelseafan
国旗只是一个变量。它存储0,如果该数字不可被从a到'range(2,int(math.sqrt(z)+1)'中的任何数字不可分割' '只要其中一个数字完全除以'如果z%a = = 0'该标志变为1. 只有当该标志为0时才是打印的数字,否则它可以被其他数字整除,因此不是质数。 – Sohaib
不要忘记标记为正确/ upvote,如果找到它有用的。这就是这个社区的功能 – Sohaib