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 = ;
while(b){
if(b & ){ret += a;ret %= c;}
a <<= ;
if(a >= c)a %= c;
b >>= ;
}
return ret;
} //计算 x^n %c
ll pow_mod(ll x,ll n,ll mod){
if(n == )return x%mod;
x %= mod;
ll tmp = x;
ll ret = ;
while(n){
if(n & ) ret = mult_mod(ret, tmp, mod);
tmp = mult_mod(tmp, tmp, mod);
n >>= ;
}
return ret;
}
Miller_Rabin Prime Number test:
return TRUE when Prime Number (BE POSSIBLITY)
return FALSE when not a Prime Number
//以a为基,n-1=x*2^t a^(n-1)=1(mod n) 验证n是不是合数
//一定是合数返回true,不一定返回false
bool check(ll a,ll n,ll x,ll t){
ll ret = pow_mod(a, x, n);
ll last = ret;
for(int i = ; i <= t; ++i){
ret = mult_mod(ret,ret,n);
if(ret == && last != && last != n - ) return true;//合数
last = ret;
}
if(ret != ) return true;
return false;
} // Miller_Rabin()算法素数判定
//是素数返回true.(可能是伪素数,但概率极小)
//合数返回false; bool Miller_Rabin(ll n){
if(n < ) return false;
if(n == ) return true;
if((n & ) == ) return false;//偶数
ll x = n - ;
ll t = ;
while((x & ) == ){x >>= ; ++t;}
for(int i = ; i <S ; ++i){
ll a = rand() % (n - ) + ;
if(check(a,n,x,t))
return false;//合数
}
return true;
}
Pollard_rho Algorithm
The quality factor decomposition :
ll factor[];//质因数分解结果(刚返回时是无序的)
int tol;//质因数的个数。数组小标从0开始 ll gcd(ll a,ll b){
if(a == ) return ;
if(a < ) return gcd(-a,b);
while(b){
ll t = a % b;
a = b;
b = t;
}
return a;
} ll Pollard_rho(ll x,ll c){
ll i = , k = ;
ll x0 = rand()%x;
ll y = x0;
while(){
++i;
x0 = (mult_mod(x0,x0,x)+c)%x;
ll d = gcd(y-x0,x);
if(d != && d != x) return d;
if(y == x0) return x;
if(i == k){y = x0; k += k;}
}
}
//对n进行素因子分解
void findfac(ll n){
if(Miller_Rabin(n)){
factor[tol++] = n;
return;
}
ll p = n;
while(p >= n) p = Pollard_rho(p,rand()%(n-)+);
findfac(p);
findfac(n/p);
}
Miller_Rabin、 Pollard_rho Template的更多相关文章
- HDU-3864 D_num Miller_Rabin和Pollard_rho
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3864 题意:给定一个数n,求n的因子只有四个的情况. Miller_Rabin和Pollard_rho ...
- Miller_rabin算法+Pollard_rho算法 POJ 1811 Prime Test
POJ 1811 Prime Test Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 32534 Accepted: 8 ...
- IDEA04 工具窗口管理、各种跳转、高效定位、行操作、列操作、live template、postfix、alt enter、重构、git使用
1 工具窗口管理 所有的窗口都是在view -> tools windows 下面的,这些窗口可以放在IDEA的上下左右各个位置:右键某个窗口后选择move to 即可进行位置调整 2 跳转 2 ...
- Kruscal 、 Prime Template
Kruscal Template : 很裸的Kruscal Template(求最小生成树中最长路,即最短路中最长路) //#pragma comment(linker, "/STACK: ...
- jdbc事务、连接池概念、c3p0、Driud、JDBC Template、DBUtils
JDBC 事务控制 什么是事务:一个包含多个步骤或者业务操作.如果这个业务或者多个步骤被事务管理,则这多个步骤要么同时成功,要么回滚(多个步骤同时执行失败),这多个步骤是一个整体,不可分割的. 操作: ...
- Centos 7 Docker、docker-compose、Registrator、Consul、Consul Template和Nginx实现高可扩展的Web框架
安装所需软件 Docker Docker-compose 配置docker-compose.yml文件内容如下: #load balancer will automatically update th ...
- bzo4802 欧拉函数 miller_rabin pollard_rho
欧拉函数 Time Limit: 5 Sec Memory Limit: 256 MBSubmit: 1112 Solved: 418[Submit][Status][Discuss] Descr ...
- 从外部访问 Template (模板)的控件、获取它的属性值
DataTemplate 和 ControlTemplate 两个类均派生自 FrameWorkTemplate类.这个类有个 FindName方法 供我们查询内部控件. ControlTempla ...
- Django Template语法中 OneToOne、ForeignKey 外键查询
主表的Models的结构 class A(models.Model): username = models.CharField(max_length=32, verbose_name='用户名称') ...
随机推荐
- RAW模板命名规范
国有国法,家有家规,任何一种开发都要有自己规范,RAW模板也一样,这个文章来介绍一下RAW模板命名的规范. 格式: 开发者或组织_描述词_名称 开发者或组织:如know或自己的组织名 描述词:c-&g ...
- java集合分析(转载)
参考文章:浅谈Java中的Set.List.Map的区别 Java 7 Collections详解 java中集合分为三类: Set(集) List(列表) Map(映射) Set和List继承自Co ...
- C#调用Matlab生成的dll方法
其实整个过程比较简单,但是需要心细一点. 需要的工具:VS2005及以上版本,MATLAB2008B及以上版本,另外非常重要的需要安装一个MATLAB Compiler Runtime,这个文件(MC ...
- Qt之界面美化输入框(使用QSS确实非同凡响)
我们先看下酷狗音乐的输入框效果图: 这里我们需要实现在输入框里面添加一个按钮(多个也一样),并且提供一个默认时候的文字..直接上代码好了. QHBoxLayout *lay = new QHBoxLa ...
- Intersecting Lines(数学)
Intersecting Lines Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 12844 Accepted: 57 ...
- Git基础 1 ---- 版本控制系统的介绍
1 Git 1 版本控制系统 vcs - version control system 2 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统 3 版本控制系统的主要功能 1 ...
- MyReport报表引擎2.6.5.0新功能
新的文本渲染引擎,打印旋转时保持文本高精度矢量输出,打印更清晰. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQva29uZ195ZWU=/font/5a6 ...
- 阵列中条带(stripe)、stripe unit
摘抄:http://blog.sina.com.cn/s/blog_4a362d610100aed2.html 在磁盘阵列中,数据是以条带(stripe)的方式贯穿在磁盘阵列所有硬盘中的.这种数据的分 ...
- js静态方法和实例方法
js静态方法 function foo(){} // 声明类 foo.method = function(){} // 方法体 使用:foo.method() js实例方法 function foo( ...
- 两种MD5最后的值不一样,因为两种做法不一样
//MD5加密 private static string Md5Hash(string input) { MD5CryptoServiceProvider m ...