鱼C论坛

 找回密码
 立即注册
查看: 2574|回复: 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的判断问题也很大,再说
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-3-30 17:43:20 | 显示全部楼层
在第二个while循环里。
你的i并不大于2,根本没有进入第二个while循环
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-30 17:48:28 | 显示全部楼层
萌新 求大佬们帮帮忙
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

!!好的 谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

我想让 n除以i得出来的余数不得零 且n i 不相等 我觉得这样的条件下能算出质数 这是错在哪了呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

你得遍历所有的i以后才能下结论,而不是直接判断
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

那应该咋表示呢  是把条件放在内循环中 然后再写if吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-30 18:12:57 | 显示全部楼层
本帖最后由 heidern0612 于 2020-3-30 18:27 编辑
羊同学 发表于 2020-3-30 18:11
那应该咋表示呢  是把条件放在内循环中 然后再写if吗


#x取要求范围数,Y取X范围的除数(取不到X),可以整除便不是。

  1. x=y=2
  2. for x in range (2,500):
  3.     for y in range(2,x):
  4.         if(x%y==0):
  5.             break
  6.     else:
  7.         print(x,end =" ")
复制代码


  1. #print(" ".join(f"{x}" for x in range(2,500) if not [y for y in range(2,x) if x % y ==0]))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

一定要写 for in循环码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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


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

既然定义了范围查找,循环迭代就跑不了。
小甲鱼最新课程 -> https://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值才能得到正确答案,你的算法无解。
按你的写法逻辑改写了一下程序:
  1. n=100
  2. while n<500:
  3.     i=2
  4.     n+=1
  5.     zhishu=True    #假设n是质数
  6.     while i<250:
  7.         if n%i==0:     #一旦发现n能被i整除,就把质数状态改为False
  8.             zhishu=False
  9.             break       #都已经判断不是质数了,不用继续下面的判断了
  10.         i+=1      #i初始值是2,也需要加入验证,累进要放到后面
  11.     if zhishu:     #只能在外循环中才能打印,否则你只能看到不停闪动的数值
  12.         print(n)
复制代码

程序可以运行了,但是有好多优化的地方,一是这种情况下用for in range()远比while+累进要来的方便、直接、简洁。二是i值没必要设置2-250,只需要到n的一半就可以了,可以省掉很多循环。
  1. for n in range(101,500):
  2.     zhishu=True
  3.     for i in range(2,n//2+1):
  4.         if n%i==0:
  5.             zhishu=False
  6.             break
  7.     if zhishu:
  8.        print(n)
复制代码

是不是精简很多?还有用函数,更方便更高效:
  1. def zhishu(num):
  2.     for i in range(2,num//2+1):
  3.         if num%i==0:
  4.             return False
  5.      return True

  6. for n in range(101,500):
  7.     if zhishu(n):
  8.         print(n)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-26 12:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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