首页 > 米勒罗宾素性测试(Miller–Rabin primality test)

米勒罗宾素性测试(Miller–Rabin primality test)

 

 

 1 #include   //该程序为哥德巴赫猜(想输出所有的组合)
 2 #include
 3 #include
 4 #include
 5 #include
 6 
 7 using namespace std;
 8 
 9 typedef unsigned long long ull;
10 typedef unsigned long long LL;
11 
12 LL prime[6] = { 2, 3, 5, 233, 331};
13 LL qmul(LL x, LL y, LL mod) { // 乘法防止溢出, 如果p * p不爆LL的话可以直接乘; O(1)乘法或者转化成二进制加法
14 //快速乘法取模算法
15 
16     return (x * y - (long long)(x / (long double)mod * y + 1e-3) *mod + mod) % mod;
17     /*
18     LL ret = 0;
19     while(y) {
20         if(y & 1)
21             ret = (ret + x) % mod;
22         x = x * 2 % mod;
23         y >>= 1;
24     }
25     return ret;
26     */
27 }
28 
29 LL qpow(LL a, LL n, LL mod) {
30     LL ret = 1;
31     while(n) {
32         if(n & 1) ret = qmul(ret, a, mod);
33         a = qmul(a, a, mod);
34         n >>= 1;//n=n/2二进制乘除法
35     }
36     return ret;
37 }
38 
39 
40 bool Miller_Rabin(LL p) {
41     if(p < 2) return 0;
42     if(p != 2 && p % 2 == 0) return 0;
43     LL s = p - 1;
44     while(! (s & 1)) s >>= 1;//排除掉偶数
45     for(int i = 0; i < 5; ++i) {
46         if(p == prime[i]) return 1;
47         LL t = s, m = qpow(prime[i], s, p);
48         //二次探测定理卡米歇尔数保证该数为素数
49         //卡米歇尔数若一个数为合数当050         //二次探测定理如果p是一个素数,0
51         while(t != p - 1 && m != 1 && m != p - 1) {
52             m = qmul(m, m, p);
53             t <<= 1;
54         }
55         if(m != p - 1 && !(t & 1)) return 0;//不是奇数且m!=p-1
56     }
57     return 1;
58 }

 

转载于:https://www.cnblogs.com/Fy1999/p/8908462.html

更多相关:

  • L1-056 猜数字 (20 分) 一群人坐在一起,每人猜一个 100 以内的数,谁的数字最接近大家平均数的一半就赢。本题就要求你找出其中的赢家。 输入格式: 输入在第一行给出一个正整数N(≤104)。随后 N 行,每行给出一个玩家的名字(由不超过8个英文字母组成的字符串)和其猜的正整数(≤ 100)。 输出格式: 在一行中...

  • 达哥送分给我我都不要,感觉自己挺牛批。 $type=0:$ 跟visit那题类似,枚举横向移动的步数直接推公式: $ans=sum C_n^i imes C_i^{frac{i}{2}} imes C_{n-i}^{frac{n-i}{2}},i\% 2=0$ $type=1:$ 因为不能触碰负半轴,所以可以把右移看成...

  • 题目链接 题意:给你三个数n,m,k;让你构造出一个nm的矩阵,矩阵元素只有两个值(1,-1),且满足每行每列的乘积为k,问你多少个矩阵。 解法:首先,如果n,m奇偶不同,且k=-1时,必然无解: 设n为奇数,m为偶数,且首先要满足每行乘积为-1,那么每行必然有奇数个-1,那么必然会存在有偶数个-1.。满足每列乘积为-1,那么每列必...

  • Description 有 n 种数字,第 i 种数字是 ai、有 bi 个,权值是 ci。 若两个数字 ai、aj 满足,ai 是 aj 的倍数,且 ai/aj 是一个质数, 那么这两个数字可以配对,并获得 ci×cj 的价值。 一个数字只能参与一次配对,可以不参与配对。 在获得的价值总和不小于 0 的前提下,求最多进行多少次配对...

  • 快速幂       1 #include 2 #include 3 #include 4 #define LL long long 5 using namespace std; 6 7 LL Pow(LL a, LL b) 8 { 9 LL an...

  • 需要用到概率论的容斥定理以及计算1 ^ 4 + 2 ^ 4 + ……+ n ^ 4的计算公式1^4+2^4+……+n^4=n(n+1)(2n+1)(3n^2+3n-1)/30   #pragma comment(linker,"/STACK:1024000000,1024000000") #include #incl...

  • /*判断屏幕宽高比是否为16:9*/ function isScreen16to9() {return window.screen.height / window.screen.width === 9 / 16; }...

  • /*关闭、刷新、跳转、离开当前网页前提示*/ onbeforeunload = function () {return false; };  ...

  • let json = {/**判断JSON格式*/ isJSON: function (str) {if (typeof str == "string") {try {var obj = JSON.parse(str);if (typeof obj == "object" && obj) {return true;} else {...

  •   项目结构   index.js //必须要安装否则就别想运行了❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤ //npm i body-parser -D & cnpm i express & cnpm i node-xlsx & cnp...

  • 一、递归 函数    为什么要有函数,提高代码的可读性,避免重复的代码,提高代码的复用性      在函数中能用return的不要print 1、递归的最大深度997 def foo(n):print(n)n+=1foo(n) foo(1) 递归的最大深度 2、修改递归的最大深度     由此我们可以看出,未报错之前能看到的最大数...