判断大数是否是素数问题
来源:互联网 发布:国云数据科技有限公司 编辑:程序博客网 时间:2024/05/16 15:59
判断一个素数的方法首先要从素数的定义来看,一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数。来自百度百科。这就可以看出我们要判断是否素数只要for(2<= i < num), if num%2 == 0. return it is a primer number. otherwise it is a composite number.
附上简单code.
def isPrimer(num):for i in range(2, int(math.sqrt(num)) + 1):if num % i == 0:return Falsereturn TruePS:当然这里没有做关于1和2的判断。
下面我们来讨论对于大数的素数判断问题。何为大数1233333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333332222222222222222222222222222222如果我们对于上面的数字的math.sqrt()做循环运算,看起来不是一个好主意。这里我们就要祭出今天的一个主要话题,当然这个要回归到数学问题了。费马小定理【对于任意的a<p 如果a^(p-1)=1(mod p)成立,那么我们认为p是一个素数】。可以找一些例子来验证:
2^2 = 1(mod 3) yes. so 3 primer number.
2^3 = 1(mode 4) error. so 4 is composite number
2^4 = 1(mode 5) yes. so 5 is primer number
那么我们似乎只要套用一下这个公式就可以了。no。求一个2^p当p足够大的时候,这里似乎比上面的循环更加可怕。但是有了幂模运算,这个问题有可以得到解决:
(a^b)%c = ((a%c)^b)%c.
这样我们的问题就可以简单的解决了
another code with c sharp;
static int GetMod(int a, int b, int n) { int ret = 1; while (0 != b--) { ret = a * ret % n; } return ret; }
if 上面的function return 1. so it is a primer. otherwise it is a composite number.
ok, 通过这些我们完成了一个数字的素数判断。 看起来还是很有意思的。嘎嘎、
- 判断大数是否是素数问题
- 判断是否是素数
- 判断是否是素数
- 判断是否是素数
- 判断是否是素数
- 判断是否是素数
- 判断是否是素数
- 循环判断是否是素数
- java判断是否是素数
- 判断整数是否是素数
- 判断手机号是否是素数
- 测试一个大数是否是素数
- 问题二十二:判断一个数是否是素数
- 判断一个数是否是素数
- 判断一个数是否是素数
- 判断一个数是否是素数
- 判断一个数是否是素数
- 判断一个数是否是素数
- 设备节点
- MiniTable 可单选/取消单选.
- 【Android Trick 3】获取网络状态并进入设置
- Oracle RAC 环境下的连接管理
- ognl学习(二)---struts2标签库与OGNL表达式的使用
- 判断大数是否是素数问题
- h2数据库创建表
- opencv用图片or视频 进行人脸检测
- Crontab 介绍
- IT项目管理之需求管理
- ArcGIS的直线距离Straight line工具
- 踏实地走出追求智慧的求学路
- linux下部分头文件的作用
- 操作系统大型实验进展(1)-----c++ 初始化文件