大数是否为素数【费马小定理+Carmichael数判断】
来源:互联网 发布:一个淘宝号可以刷几单 编辑:程序博客网 时间:2024/05/25 13:33
作为判断一个大数是否为素数的模板。
代码如下:
#include<stdio.h>#include<algorithm>#include<iostream>using namespace std;long long multi(long long a,long long b,long long mod){long long temp = a,sum = 0;while(b){if(b&1) sum = (sum + temp) % mod;temp = (temp + temp) % mod;b = b>>1;}return sum;}long long Modular_exponent(long long a,long long x,long long mod) // a ^ x mod MOD.{long long t = a % mod,r = 1;while(x){if(x & 1) r = multi(r,t,mod);t = multi(t,t,mod); x = x>>1;}return r;}//Carmicheal number: 561,41041,825265,321197185bool Miller_Rabin(long long n) // 如果是素数,则返回1,否则返回0.{long long time = 20;if(n < 2) return false;if(n == 2) return true;bool flag = false;for(long long k = 0;k <= time;++k){flag = false;long long d = n - 1,r = 0,t,a = rand()%(n-2) + 2;while((d & 1) == 0){d = d>>1;r++;}t = Modular_exponent(a,d,n);if(t == 1 || t == n-1) {flag = true;continue;}for(long long i = 1;i < r;i++){t = multi(t,t,n);if(t == 1) {flag = false;return flag;}if(t == n-1) {flag = true;break;}}if(!flag) break;}return flag;}int main(){long long n;while(~scanf("%lld",&n))puts(Miller_Rabin(n) ? "Yes" : "No");return 0;}
- 大数是否为素数【费马小定理+Carmichael数判断】
- 判断大数是否为素数 (费马小定理+Carmichael数判断)
- 判断一个数是否为素数(函数)
- 如何判断一个数是否为素数
- 判断一个数是否为素数
- 判断一个数是否为素数
- 判断一个数是否为素数
- 判断一个数是否为素数
- 判断一个数是否为素数
- 输入一个数,判断是否为素数
- 判断一个数是否为回文素数
- 如何判断一个数是否为素数
- 判断一个数是否为素数
- 判断一个数是否为素数
- 判断一个数是否为素数
- 判断一个数是否为素数
- 判断一个数是否为素数
- 判断一个数是否为素数
- 总结了下static用法
- C/C++中怎样获取日期和时间
- Struts2 URL传递中文参数乱码问题
- Javascript 设计模式学习笔记(1) - 封装
- Xampp下基于Netbeans的Yii测试环境(一)
- 大数是否为素数【费马小定理+Carmichael数判断】
- Nutch 二次开发需要修改的东西
- struts2.xml的基础配置
- git文章学习!
- Nutch部署及相关问题(中文乱码等)修正
- android获取本地图片或拍照图片
- jquery第一课
- nutch 提高搜索精度
- [Linux驱动开发] 根文件系统制作