[模板] Miller_Rabin和Pollard_Rho

Miller_Rabin

用途

快速($O(slogn)$,s为尝试次数)地判断一个数是否是质数

原理

首先有费马小定理$a^{p-1}=1 (mod\ p)$当p为质数时成立,所以可以随机选择a来以这个式子作为一定的判断依据,但并不是所有合数都不满足这个式子,甚至存在合数对所有的a都不满足这个式子

然后有二次探测定理$a^2=1 (mod p)$,p是奇质数成立当$a=1(mod p)$或$a=p-1(mod p)$

证明:移项可得$(a-1)(a+1)=0 (mod p)$

原文地址:https://www.cnblogs.com/Ressed/p/11076543.html

时间: 2024-08-08 15:09:08

[模板] Miller_Rabin和Pollard_Rho的相关文章

Miller_Rabin、 Pollard_rho Template

Multiply and pow Function: //计算 (a*b)%c. a,b都是ll的数,直接相乘可能溢出的 // a,b,c <2^63 ll mult_modq(ll a,ll b,ll c){ a %= c; b %= c; ll ret = 0; while(b){ if(b & 1){ret += a;ret %= c;} a <<= 1; if(a >= c)a %= c; b >>= 1; } return ret; } //计算 x^

poj2429 GCD &amp; LCM Inverse

用miller_rabin 和 pollard_rho对大数因式分解,再用dfs寻找答案即可. http://poj.org/problem?id=2429 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #include <cmath> 5 using namespace std; 6 typedef __int64 LL; 7 const int maxn = 100;

SPOJ - NUMTRYE

测试了Miller_Rabin和pollard_rho 题目里这个g(n)是有结论的,但我搞不太懂 最后f(n)/g(n) = (p1 + 1)(p2 + 1)...(pk + 1) 1 #include <cstdio> 2 #include <time.h> 3 #include <algorithm> 4 #include <cstring> 5 #define MOD 1000000007 6 using namespace std; 7 typed

POJ 1181 大整数是否为素数以及求大整数的质因数-数论-(Miller_rabin+Pollard_rho)

题意:求一个整数是否是素数,如果不是,则输出它最小的质因数. 分析: 判断一个大整数是否为素数用Miller_rabin算法,求一个大整数的所有质因数用Pollard_rho算法.这题就是直接套模板. 另外这里的gcd和pow_mod不能用一般的方式,T了.代码里我注释掉的就是T了的写法. 代码: #include<iostream> #include<cmath> #include<ctime> #include<cstdio> #include<a

数学#素数判定Miller_Rabin+大数因数分解Pollard_rho算法 POJ 1811&amp;2429

素数判定Miller_Rabin算法详解: http://blog.csdn.net/maxichu/article/details/45458569 大数因数分解Pollard_rho算法详解: http://blog.csdn.net/maxichu/article/details/45459533 然后是参考了kuangbin的模板: http://www.cnblogs.com/kuangbin/archive/2012/08/19/2646396.html 模板如下: //快速乘 (a

hdu 3864 D_num Pollard_rho算法和Miller_Rabin算法

D_num Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Problem Description Oregon Maple was waiting for Bob When Bob go back home. Oregon Maple asks Bob a problem that as a Positive number N, if there are only four

poj1811(pollard_rho模板)

题目链接: http://poj.org/problem?id=1811 题意: 判断一个数 n (2 <= n < 2^54)是否为质数, 是的话输出 "Prime", 否则输出其第一个质因子. 思路: 大数质因子分解, 直接用 pollard_rho (详情参见: http://blog.csdn.net/maxichu/article/details/45459533) 模板即可. 代码: 1 #include <iostream> 2 #include

POJ-1811-Prime Test(pollard_rho模板,快速找最小素因子)

题目传送门 sol:Pollard_Rho的模板题,刚看了Pollard_Rho和Miller_Rabin很多原理性的东西看不懂,只是记住了结论勉强能敲代码. Pollard_Rho #include "cstdio" #include "cstdlib" #include "algorithm" #include "ctime" using namespace std; typedef long long LL; LL gc

数论 - Miller_Rabin素数测试 + pollard_rho算法分解质因数 ---- poj 1811 : Prime Test

Prime Test Time Limit: 6000MS   Memory Limit: 65536K Total Submissions: 29046   Accepted: 7342 Case Time Limit: 4000MS Description Given a big integer number, you are required to find out whether it's a prime number. Input The first line contains the