鱼C论坛

 找回密码
 立即注册
查看: 2348|回复: 11

[已解决]想知道代码错哪了 求100到500之间的素数

[复制链接]
发表于 2020-3-30 17:41:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
n=100
i=2
while 100<n<500:
    while 2<i<250:
        i+=1
        n+=1
        if n%i!=0 and n!=i:
            print(n)
最佳答案
2020-3-30 17:51:03
你先把 n+= 1放到外层循环中去
再把 i+=1 放到内层循环的最后
if的判断问题也很大,再说
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-30 17:43:20 | 显示全部楼层
在第二个while循环里。
你的i并不大于2,根本没有进入第二个while循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-30 17:48:28 | 显示全部楼层
萌新 求大佬们帮帮忙
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-30 17:51:03 | 显示全部楼层    本楼为最佳答案   
你先把 n+= 1放到外层循环中去
再把 i+=1 放到内层循环的最后
if的判断问题也很大,再说
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-30 17:54:04 | 显示全部楼层
BngThea 发表于 2020-3-30 17:51
你先把 n+= 1放到外层循环中去
再把 i+=1 放到内层循环的最后
if的判断问题也很大,再说

!!好的 谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-30 17:57:26 | 显示全部楼层

我想让 n除以i得出来的余数不得零 且n i 不相等 我觉得这样的条件下能算出质数 这是错在哪了呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-30 18:07:33 | 显示全部楼层
羊同学 发表于 2020-3-30 17:57
我想让 n除以i得出来的余数不得零 且n i 不相等 我觉得这样的条件下能算出质数 这是错在哪了呢

你得遍历所有的i以后才能下结论,而不是直接判断
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-30 18:11:12 | 显示全部楼层
BngThea 发表于 2020-3-30 18:07
你得遍历所有的i以后才能下结论,而不是直接判断

那应该咋表示呢  是把条件放在内循环中 然后再写if吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-30 18:12:57 | 显示全部楼层
本帖最后由 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 [y for y in range(2,x) if x % y ==0]))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-30 18:59:13 | 显示全部楼层
heidern0612 发表于 2020-3-30 18:12
#x取要求范围数,Y取X范围的除数(取不到X),可以整除便不是。

一定要写 for in循环码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-30 19:07:34 | 显示全部楼层
本帖最后由 heidern0612 于 2020-3-30 19:12 编辑
羊同学 发表于 2020-3-30 18:59
一定要写 for in循环码


求范围数,用for循环是最省事的。

既然定义了范围查找,循环迭代就跑不了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-30 19:24:24 | 显示全部楼层
哎,问题没解决你就匆匆确认了最佳答案,标记已解决,你还能指望谁能真正帮到你?
你的代码不多,错误太多。
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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-11 23:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表