米勒-拉宾算法
来源:互联网 发布:大数据最新技术 编辑:程序博客网 时间:2024/04/28 05:35
米勒-拉宾算法:快速判断一个数是不是素数
需要用到的定理:
最小费马定理:如果n是素数,则(a ^ (n - 1)) % n恒等于1。
快速模取幂
米勒-拉宾算法就是结合上面两种,通过不断判断fmod(a, n - 1, n)的值是否为1来判断。这是一个概率算法,如果为1,不一定为素数,不为1,则必定是合数。循环判断多次就会让概率变得极为的小。
算法模板:
#include <iostream>using namespace std;int fmod(int a, int b, int c)//快速模取幂{if(b == 1) return a;int t = fmod(a, b / 2, c);t = (t * t) % c;if(b & 1) t = (t * a) % c;return t;}int check(int n)//米勒-拉宾算法{srand(time(0));for(int i = 0; i < 100; ++ i){if(fmod(rand() % (n - 1) + 1, n - 1, n) != 1)//a的值需要变化,所以用到随机函数;a的取值为[1,n-1],因为这样就会保证如果n为素数,则n与a必互质return 0;}return 1;}int main(){int n;while(scanf("%d", &n) != EOF){if(n < 2){printf("非素数\n");continue;}if(check(n))printf("素数\n");elseprintf("非素数\n");}return 0;}
- 米勒-拉宾算法
- 米勒-拉宾素性检测算法
- 【算法】米勒-拉宾素性检验
- 【算法】米勒拉宾素数测试
- HDU5391米勒拉宾
- 拉宾米勒测试
- 素数判断算法 - 拉宾-米勒测试定理(c++实现)
- 素数判断算法 - 拉宾-米勒测试定理(c++实现)
- 素数判断算法 - 拉宾-米勒测试定理(c++实现)
- 米勒拉宾算法——素性测试
- 米勒-拉宾素数测试
- 米勒拉宾素数测试
- HDU 2138 How many prime numbers(米勒拉宾素数测试算法)
- HDU 4910 Problem about GCD(米勒拉宾)
- <模板>米勒拉宾素数判定 题目是hdu4910
- csu 1552: Friends(拉宾米勒测试+二分匹配)
- 基于米勒-拉宾素性测试 c代码演示
- hdu 2138(米勒—拉宾素数测试)
- 【快速开发】Eclipse快捷键
- Iframe自适应大小
- mongoDB 入门
- 写给想当程序员的朋友
- windows 性能监视器图表中各曲线的意义
- 米勒-拉宾算法
- tomcat可以localhost访问,127.0.0.1和本地ip访问失败
- uubntu 安装附加驱动分辨率变低
- 陈杰:Android多媒体学习综合
- 公钥,私钥和数字签名这样最好理解
- eclipse 安装adt失败
- 第七届“飞思卡尔”杯全国大学生智能汽车竞赛 赛后感想
- 迷惑消费者的11种定价策略
- Java基础之堆和栈、引用值