POJ 1811 Prime Test( Pollard-rho整数分解经典题 )
**链接:****传送门 **
题意:输入 n ,判断 n 是否为素数,如果是合数输出 n 的最素因子
思路:Pollard-rho经典题
/*************************************************************************
> File Name: Pollard_rho_Test.cpp
> Author: WArobot
> Blog: http://www.cnblogs.com/WArobot/
> Created Time: 2017年05月24日 星期三 10时55分04秒
************************************************************************/
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstdlib>
using namespace std;
#define ll long long
#define TIME 30
const int MAX_N = 1000;
const int C = 201;
ll number = 0 , MIN ;
int List[MAX_N];
// --------------------Miller_Rabin素数测试-------------------------
ll RANDOM(ll n){ return (ll)((double)rand()/RAND_MAX * n + 0.5); }
ll quick_multi(ll a,ll b,ll Mod){ // 快速计算 a * b % Mod
ll ret = 0;
while(b){
if(b&1) ret = (ret + a) % Mod;
a = ( a << 1 ) % Mod;
b >>= 1;
}
return ret % Mod;
}
ll quick_pow(ll a,ll x,ll Mod){ // 快速计算 a^x % Mod
ll ret = 1;
while(x){
if(x&1) { ret = quick_multi( ret , a , Mod); x--; }
x >>= 1;
a = quick_multi( a , a , Mod );
}
return ret % Mod;
}
bool Witness(ll a,ll n){ // Miller_Rabin 二次探测
ll tmp = n - 1;
int j = 0;
while( !( tmp & 1 ) ){ tmp >>= 1; j++; }
ll x = quick_pow( a , tmp , n );
if( x == 1 || x == n-1 ) return false;
while( j-- ){
x = x*x % n ;
if( x == n-1 ) return false;
}
return true;
}
bool Miller_Rabin(ll n){ // 检测n是否为素数
if( n < 2 ) return false;
if( n == 2 ) return true;
if( !(n&1) ) return false;
for(int i = 1 ; i <= TIME ; i++){
ll a = RANDOM( n - 2 ) + 1; // 得到随机底数
if( Witness( a , n ) ) return false;
}
return true;
}
// --------------------Pollard_rho大整数分解-------------------------
ll gcd(ll a,ll b){ return b == 0 ? a : gcd( b , a%b ); }
ll Pollard_rho(ll n,ll c){ // 找到n的一个因子
ll x , y , d , i = 1 , k = 2;
x = RANDOM( n - 1 ) + 1;
y = x;
while(true){
i++;
x = ( quick_multi( x , x , n ) + c ) % n;
d = gcd( y - x , n );
if( 1 < d && d < n ) return d;
if( y == x ) return n;
if( i == k ){
y = x; k <<= 1;
}
}
}
void find(ll n,ll c){
if( n == 1 ) return;
if( Miller_Rabin(n) ){
List[ number++ ] = n ;
MIN = min( MIN , n );
return;
}
ll p = n ;
while( p >= n ) p = Pollard_rho( p , c-- );
find( p , c );
find( n/p , c );
}
int main(){
int T; ll tar , tmp = pow(2,54)-1;
scanf("%d",&T);
while(T--){
scanf("%lld",&tar);
if( Miller_Rabin(tar) ) printf("Prime\n");
else{
MIN = tmp;
find( tar , C );
printf("%lld\n",MIN);
}
}
return 0;
}
POJ 1811 Prime Test( Pollard-rho整数分解经典题 )的更多相关文章
- POJ 2429 GCD & LCM Inverse (Pollard rho整数分解+dfs枚举)
题意:给出a和b的gcd和lcm,让你求a和b.按升序输出a和b.若有多组满足条件的a和b,那么输出a+b最小的.思路:lcm=a*b/gcd lcm/gcd=a/gcd*b/gcd 可知a/gc ...
- POJ1811_Prime Test【Miller Rabin素数测试】【Pollar Rho整数分解】
Prime Test Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 29193 Accepted: 7392 Case Time ...
- POJ1811_Prime Test【Miller Rabin素数測试】【Pollar Rho整数分解】
Prime Test Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 29193 Accepted: 7392 Case Time ...
- POJ2429_GCD & LCM Inverse【Miller Rabin素数測试】【Pollar Rho整数分解】
GCD & LCM Inverse Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9756Accepted: 1819 ...
- HDU1164_Eddy's research I【Miller Rabin素数测试】【Pollar Rho整数分解】
Eddy's research I Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- Miller_rabin算法+Pollard_rho算法 POJ 1811 Prime Test
POJ 1811 Prime Test Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 32534 Accepted: 8 ...
- POJ 1811 Prime Test (Pollard rho 大整数分解)
题意:给出一个N,若N为素数,输出Prime.若为合数,输出最小的素因子.思路:Pollard rho大整数分解,模板题 #include <iostream> #include < ...
- Miller&&Pollard POJ 1811 Prime Test
题目传送门 题意:素性测试和大整数分解, N (2 <= N < 254). 分析:没啥好讲的,套个模板,POJ上C++提交 收获:写完这题得到模板 代码: /************** ...
- POJ 1811 Prime Test 素性测试 分解素因子
题意: 给你一个数n(n <= 2^54),判断n是不是素数,如果是输出Prime,否则输出n最小的素因子 解题思路: 自然数素性测试可以看看Matrix67的 素数与素性测试 素因子分解利用 ...
随机推荐
- 【高级算法】禁忌搜索算法解决3SAT问题(C++实现)
转载请注明出处:http://blog.csdn.net/zhoubin1992/article/details/46440389 近期梳理,翻出了当年高级算法课程做的题目.禁忌搜索算法解决3SAT问 ...
- sendfile学习
参考 https://zhuanlan.zhihu.com/p/20768200?refer=auxten 而成本很多时候的体现就是对计算资源的消耗,其中最重要的一个资源就是CPU资源. Sendfi ...
- [Cypress] Wait for XHR Responses in a Cypress Test
When testing interactions that require asynchronous calls, we’ll need to wait on responses to make s ...
- luogu2431 正妹吃月饼
题目大意 求一个正整数集合\(K\),使得\(\sum_{k\in K}2^k\in[A,B]\),且\(|K|\)最大.\(A,B\)大小在long long范围内. 思路 \(\sum_{k\in ...
- POJ3255 Roadblocks 严格次短路
题目大意:求图的严格次短路. 方法1: SPFA,同时求单源最短路径和单源次短路径.站在节点u上放松与其向量的v的次短路径时时,先尝试由u的最短路径放松,再尝试由u的次短路径放松(该两步并非非此即彼) ...
- Resin 优化配置
1.在resin.conf中的session-config内部添加 <session-max>4096</session-max> <session-timeout> ...
- Intel 的 MKL是可以用来训练的——官方的实验也提到了训练
TensorFlow如何充分使用所有CPU核数,提高TensorFlow的CPU使用率,以及Intel的MKL加速 转载 2017年09月07日 16:34:58 标签: cpu / gpu 转载 ...
- ORA-03137 - ORA-12592 TNS:BAD PACKET OR ORA-3137 故障处理
环境 操作系统:CentOS release 6.8 数据库:oracle 11.2.0.4.190115 说明:数据库psu 为19年1月份的补丁,可不间断运行,但是开发提示在执行一些批处理的时候, ...
- hdu1507 最大匹配
题目大意: 在 n*m在矩阵中,有一些点被标记为黑色,问可以多少对相邻的没有重复的白色块. 思路: 看上去与二分匹配毫无关系.但是没有其他好的解法,转化为二分匹配是正解.二分匹配的条件是{X,Y|E} ...
- 配置postgreSQL允许外部连接
配置远 程连接PostgreSQL数据库的步骤很简单,只需要修改 %PostgreSQL_path%/data 目录下的 pg_hba.conf 和 postgresql.conf. 一.修改pg_h ...