鱼C论坛

 找回密码
 立即注册
查看: 2678|回复: 10

关于求素数的一个程序求详解

[复制链接]
发表于 2016-8-20 18:40:57 | 显示全部楼层 |阅读模式
5鱼币
那位大神帮忙看看哦!这个程序是怎么运行的过程,

截图

截图

最佳答案

查看完整内容

LZ 给的代码有点小问题。首先 showPrimes 函数里的 primeList 是局部变量,下面运行for循环,系统会报错: 找不到primeList. 其次还是showPrimes函数里, 根据 i 的范围,这个程序 求的是100-200之间的素数。修改如下:
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-8-20 18:40:58 | 显示全部楼层
LZ 给的代码有点小问题。首先 showPrimes 函数里的 primeList 是局部变量,下面运行for循环,系统会报错: 找不到primeList. 其次还是showPrimes函数里, 根据 i 的范围,这个程序 求的是100-200之间的素数。修改如下:

  1. def isPrime(num):
  2.     i = 2                    #素数最小是2 所以i从2开始
  3.     isPrime = 1              
  4.    
  5.     while i < (num//2):      #一个数a最大的因数,除其本身,一定小于等于 a//2
  6.         if num % i == 0:     #因此i上界取为 num//2
  7.             isPrime = 0      #如果num整除 i,那说明num是合数,令isPrime=0
  8.             break            #同时终止for循环,因为已经判断num是合数,没有做下去的必要
  9.         i += 1               #如果 num不整除i,就换更大的i来检验,
  10.     return isPrime           #return  isPrime 是为了showPrime 里的 if 判断

  11. def showPrimes():
  12.     i = 1                    
  13.     primeList = []            #记录素数
  14.     while i <=100:            # 求1到100的素数,i 代表代求的素数
  15.         if isPrime(i):        # if的特性。 如果后面跟的是数字0 那判断结果是Falsei
  16.             primeList.append(i)   #若后面是1,那判断结果就是True. 此即isPrime的值为0和1的原因
  17.         i+=1                   #如果isPrime(i)返回1,那说明i是素数,就添加进primeList  
  18.     return primeList           #最后返回该素数列表。

  19. primeList = showPrimes()      
  20. count = 0
  21. for prime in primeList:       #打印且用count统计有多少个素数
  22.     print(prime)
  23.     count += 1
复制代码

评分

参与人数 2荣誉 +5 鱼币 +10 贡献 +3 收起 理由
林轩716 + 5 + 5 + 3 非常感谢耐心的指导!谢谢啦,可以加个好友.
SixPy + 5 看图说话~

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-8-21 19:58:13 | 显示全部楼层
代码好漂亮
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-8-21 23:02:04 | 显示全部楼层
van314159 发表于 2016-8-20 18:40
LZ 给的代码有点小问题。首先 showPrimes 函数里的 primeList 是局部变量,下面运行for循环,系统会报错:  ...

根据你的代码,我运行了一个,出来1到100之间的素数,中间有个数字是  4  ,但4明显 不是素数呢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-8-22 07:16:32 | 显示全部楼层
林轩716 发表于 2016-8-21 23:02
根据你的代码,我运行了一个,出来1到100之间的素数,中间有个数字是  4  ,但4明显 不是素数呢

一个小错误
  1.   while i <= (num//2):      #一个数a最大的因数,除其本身,一定小于等于 a//2
复制代码

小于号应该是小于等于
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-8-22 16:07:32 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-8-23 23:36:15 | 显示全部楼层
van314159 发表于 2016-8-22 07:16
一个小错误

小于号应该是小于等于

呵呵!我也是问了老师才发现,
我再追问一下呢!如果求的是100到200之间的素数,该怎么修改呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-8-24 16:32:58 | 显示全部楼层
showPrimes 函数里的 primeList 是局部变量
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-8-24 18:52:52 | 显示全部楼层
林轩716 发表于 2016-8-23 23:36
呵呵!我也是问了老师才发现,
我再追问一下呢!如果求的是100到200之间的素数,该怎么修改呢?

showPrimes函数里的 i = 1 ,表示起始值。 while i <= 100 里的 100 是结束值。 所以要求 100--200之间的素数只要修改 i = 100 和 while i <= 200 就可以了。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-8-26 08:39:24 | 显示全部楼层
van314159 发表于 2016-8-24 18:52
showPrimes函数里的 i = 1 ,表示起始值。 while i

非常谢谢啦!你太厉害啦
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-8-26 09:07:13 | 显示全部楼层
林轩716 发表于 2016-8-26 08:39
非常谢谢啦!你太厉害啦


也是多看别人代码,才长进的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-22 07:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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