想知道代码错哪了 求100到500之间的素数
n=100i=2
while 100<n<500:
while 2<i<250:
i+=1
n+=1
if n%i!=0 and n!=i:
print(n) 在第二个while循环里。
你的i并不大于2,根本没有进入第二个while循环
萌新 求大佬们帮帮忙{:10_266:}{:10_266:} 你先把 n+= 1放到外层循环中去
再把 i+=1 放到内层循环的最后
if的判断问题也很大,再说 BngThea 发表于 2020-3-30 17:51
你先把 n+= 1放到外层循环中去
再把 i+=1 放到内层循环的最后
if的判断问题也很大,再说
!!好的 谢谢 羊同学 发表于 2020-3-30 17:54
!!好的 谢谢
我想让 n除以i得出来的余数不得零 且n i 不相等 我觉得这样的条件下能算出质数 这是错在哪了呢{:10_266:} 羊同学 发表于 2020-3-30 17:57
我想让 n除以i得出来的余数不得零 且n i 不相等 我觉得这样的条件下能算出质数 这是错在哪了呢
你得遍历所有的i以后才能下结论,而不是直接判断 BngThea 发表于 2020-3-30 18:07
你得遍历所有的i以后才能下结论,而不是直接判断
那应该咋表示呢是把条件放在内循环中 然后再写if吗 本帖最后由 heidern0612 于 2020-3-30 18:27 编辑
羊同学 发表于 2020-3-30 18:11
那应该咋表示呢是把条件放在内循环中 然后再写if吗
#x取要求范围数,Y取X范围的除数(取不到X),可以整除便不是。
x=y=2
for x in range (2,500):
for y in range(2,x):
if(x%y==0):
break
else:
print(x,end =" ")
#print(" ".join(f"{x}" for x in range(2,500) if not )) heidern0612 发表于 2020-3-30 18:12
#x取要求范围数,Y取X范围的除数(取不到X),可以整除便不是。
一定要写 for in循环码
{:10_269:} 本帖最后由 heidern0612 于 2020-3-30 19:12 编辑
羊同学 发表于 2020-3-30 18:59
一定要写 for in循环码
求范围数,用for循环是最省事的。
既然定义了范围查找,循环迭代就跑不了。 哎,问题没解决你就匆匆确认了最佳答案,标记已解决,你还能指望谁能真正帮到你?
你的代码不多,错误太多。
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)
页:
[1]