**链接:****传送门 **

题意:输入 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整数分解经典题 )的更多相关文章

  1. 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 ...

  2. POJ1811_Prime Test【Miller Rabin素数测试】【Pollar Rho整数分解】

    Prime Test Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 29193 Accepted: 7392 Case Time ...

  3. POJ1811_Prime Test【Miller Rabin素数測试】【Pollar Rho整数分解】

    Prime Test Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 29193 Accepted: 7392 Case Time ...

  4. POJ2429_GCD &amp; LCM Inverse【Miller Rabin素数測试】【Pollar Rho整数分解】

    GCD & LCM Inverse Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9756Accepted: 1819 ...

  5. HDU1164_Eddy&#39;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 ...

  6. Miller_rabin算法+Pollard_rho算法 POJ 1811 Prime Test

    POJ 1811 Prime Test Time Limit: 6000MS   Memory Limit: 65536K Total Submissions: 32534   Accepted: 8 ...

  7. POJ 1811 Prime Test (Pollard rho 大整数分解)

    题意:给出一个N,若N为素数,输出Prime.若为合数,输出最小的素因子.思路:Pollard rho大整数分解,模板题 #include <iostream> #include < ...

  8. Miller&&Pollard POJ 1811 Prime Test

    题目传送门 题意:素性测试和大整数分解, N (2 <= N < 254). 分析:没啥好讲的,套个模板,POJ上C++提交 收获:写完这题得到模板 代码: /************** ...

  9. POJ 1811 Prime Test 素性测试 分解素因子

    题意: 给你一个数n(n <= 2^54),判断n是不是素数,如果是输出Prime,否则输出n最小的素因子 解题思路: 自然数素性测试可以看看Matrix67的  素数与素性测试 素因子分解利用 ...

随机推荐

  1. Leading and Trailing

    You are given two integers: n and k, your task is to find the most significant three digits, and lea ...

  2. 洛谷 P1649 [USACO07OCT]障碍路线Obstacle Course

    P1649 [USACO07OCT]障碍路线Obstacle Course 题目描述 Consider an N x N (1 <= N <= 100) square field comp ...

  3. AC自己主动机模板(数组实现版)

    BY 九野 做了一道题,用我的那种写法华丽丽的超时了.,无奈学一学数组实现的 #include<stdio.h> #include<string.h> #include< ...

  4. selenium找到页面元素click没反应

    问题描述:通过调试可以看到控制台已经找到了起诉入口页面元素,可是点击“我是原告”没有反应了,也没有报错 解决办法:登录时是跳进了两层的iframe中,需要跳出iframe才能找到我是原告.

  5. bzoj2819: Nim(博弈+树剖)

    2819: Nim 题目:传送门 题解: 很久之前学博弈的时候看过的一道水题,其实算不上博弈吧... 直接套上一个裸的树剖啊,把路径上的点值全都xor(xor满足结合率所以就不管那么多随便搞啦) do ...

  6. 前端分页功能实现(PC)

    <!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>加 ...

  7. Hadoop MapReduce编程 API入门系列之wordcount版本5(九)

    这篇博客,给大家,体会不一样的版本编程. 代码 package zhouls.bigdata.myMapReduce.wordcount1; import java.io.IOException; i ...

  8. eclipse中文汉字看不清或过小的问题解决方法!!

    把字体修改为 中欧字体就可以看清汉字

  9. 开发辅助 | 阿里图标库iconfont入门使用

    目前大多数的互联网公司,前端开发和UI设计师配合中,针对设计师给图的效果图,前端开发工程师不再像往常一样对于细小图标进行切图,取而代之的是引用阿里图标库(http://iconfont.cn/):简单 ...

  10. 有关PHP里的Cookie

    会话技术:Cookie,Session: Cookie是客户端技术,服务器把每个用户的数据以Cookie的形式保存在用户各自的浏览器,当用户用浏览器再次访问服务器的web资源时则会带着各自的数据去了: ...