哎,问题没解决你就匆匆确认了最佳答案,标记已解决,你还能指望谁能真正帮到你?
你的代码不多,错误太多。
1.你n初始化就是100,100<n<500为False,根本就进不了循环。去掉那个小于判断就可以进循环了;
2.n的累进放进了内循环;
3.内循环和外循环一样的问题;
4.即使修改后可以进入内循环,但i值累进到了250退出内循环回到外循环,i>250,后面再也进不了内循环,所以i的初始化必须在外循环里面才能保证每次进入内循环;
5.所有循环正常了,你的判断逻辑又有问题,你只在内循环i为某值就判断出结果,比如n为102,i为5的时候,判断就是Ture,而实际上你要判断完所有的i值才能得到正确答案,你的算法无解。
按你的写法逻辑改写了一下程序:n=100
while n<500:
i=2
n+=1
zhishu=True #假设n是质数
while i<250:
if n%i==0: #一旦发现n能被i整除,就把质数状态改为False
zhishu=False
break #都已经判断不是质数了,不用继续下面的判断了
i+=1 #i初始值是2,也需要加入验证,累进要放到后面
if zhishu: #只能在外循环中才能打印,否则你只能看到不停闪动的数值
print(n)
程序可以运行了,但是有好多优化的地方,一是这种情况下用for in range()远比while+累进要来的方便、直接、简洁。二是i值没必要设置2-250,只需要到n的一半就可以了,可以省掉很多循环。for n in range(101,500):
zhishu=True
for i in range(2,n//2+1):
if n%i==0:
zhishu=False
break
if zhishu:
print(n)
是不是精简很多?还有用函数,更方便更高效:def zhishu(num):
for i in range(2,num//2+1):
if num%i==0:
return False
return True
for n in range(101,500):
if zhishu(n):
print(n)
|