鱼C论坛

 找回密码
 立即注册
查看: 4026|回复: 17

判断素数,高效率的写法。

[复制链接]
发表于 2014-9-20 15:44:52 | 显示全部楼层 |阅读模式

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

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

x
判断素数,完全没有思路啊。
有没有什么神奇的模块可以用。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-9-20 17:21:12 | 显示全部楼层
如果你数学好。。。请你看这篇文章。。。
http://blog.csdn.net/liukehua123/article/details/5482854
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-20 17:35:27 | 显示全部楼层
hellofdy 发表于 2014-9-20 17:21
如果你数学好。。。请你看这篇文章。。。
http://blog.csdn.net/liukehua123/article/details/5482854

没大看懂,谢谢咯。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-20 18:03:51 | 显示全部楼层
判断素数啊 长久来考虑的话
先用筛法弄出一个素数数组 如 【1~10W】
然后就
循环从2开始 用你那个数取余数 数组里的素数 直到你的那个数的平方根为止
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-24 13:04:42 | 显示全部楼层
  1. def isprime(n):
  2.     for i in range(2,(int((n+1)**0.5))+1):
  3.         if n % i == 0:
  4.             return False
  5.     return True
复制代码


n要为>=2的整数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-24 14:36:10 | 显示全部楼层

range(2,(int((n+1)**0.5))+1)
这个是啥意思,不是素数的定义是
检查一个正整数N是否为素数,最简单的方法就是试除法,将该数N用小于等于根号N的所有素数去试除,若均无法整除,N则为素数

不是写成range(2,(int(n**0.5))+1)就行了么,为什么要写n+1呢

评分

参与人数 1荣誉 +2 鱼币 +2 贡献 +2 收起 理由
bevin + 2 + 2 + 2

查看全部评分

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

使用道具 举报

 楼主| 发表于 2014-9-24 14:57:39 | 显示全部楼层

终于解决了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-24 14:59:57 | 显示全部楼层

没加好友,不能@,先放这里了http://bbs.fishc.com/forum.php?m ... id=50263&ctid=7
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-24 15:05:11 | 显示全部楼层
破渔网兜兜 发表于 2014-9-24 14:36
range(2,(int((n+1)**0.5))+1)
这个是啥意思,不是素数的定义是
不是写成range(2,(int(n**0.5))+1)就行 ...

多几个数没差别吧,就是多除了几个。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-25 11:26:36 | 显示全部楼层
减少 除数n 的选取个数就行了。
比如 n = 4,既然4 能被 2 整除,也就是说 一个连2都无法整除的数,也无法被4整除,该直接使用5(素数,作为素数无法被整除,且所有的 合数都能被 素数表示)。因此我们使用 素数作为除数可以极大提高效率。另外选择的素数也不能大于被除数,因为无法 大数整除小数。
因此采用 素数数组作为除数是一种高效的选择。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-25 11:35:11 | 显示全部楼层
青蛙星 发表于 2014-9-25 11:26
减少 除数n 的选取个数就行了。
比如 n = 4,既然4 能被 2 整除,也就是说 一个连2都无法整除的数,也无法 ...

其实我本来想筛选1000以内的素数,用这种方法等于是直接有结果了,所以才问的另外的方法。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-25 17:16:38 | 显示全部楼层
wei_Y 发表于 2014-9-25 11:35
其实我本来想筛选1000以内的素数,用这种方法等于是直接有结果了,所以才问的另外的方法。

你没有注意到一件事吗?如果是事先列出的素数数组是没有价值的。
换句话说,这个数组是要增长的,随着你找到的素数越多这个数组就越大,你每找到一个素数就放进去,以备计算下一个数是否是素数。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-25 17:47:40 | 显示全部楼层
青蛙星 发表于 2014-9-25 17:16
你没有注意到一件事吗?如果是事先列出的素数数组是没有价值的。
换句话说,这个数组是要增长的,随着你 ...

嗯,我是想的没有事先列出的素数然后去判断一下。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-26 00:20:15 | 显示全部楼层
期待程序出现  
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-26 21:14:03 | 显示全部楼层
顶顶啊啊啊啊:cry
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-27 11:54:49 | 显示全部楼层
你在网上查  筛选法素数    这个应该是最快的了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-9-27 12:53:36 | 显示全部楼层
1012662902 发表于 2014-9-27 11:54
你在网上查  筛选法素数    这个应该是最快的了

谢谢哦,已经解决了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-5 14:55:31 | 显示全部楼层
def sushu(n):
        import math
        for i in range(2,int(math.sqrt(n)+1)):
                if n % i == 0:
                        print(n,'is not sushu')
                        break
        else:
                print(n,'is sushu')
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-16 05:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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