数据范围很大,用米勒罗宾测试和Pollard_Rho法可以分解大数。

模板在代码中 O.O

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
using namespace std; __int64 pri[]= {,,,,,,,,,,};//用小素数表做随机种子避免第一类卡米歇尔数的误判
__int64 multi(__int64 a,__int64 b,__int64 n) //乘法快速幂
{
__int64 tmp=;
while(b)
{
if(b&)
{
tmp+=a;
if(tmp>=n) tmp-=n;
}
a<<=;
if(a>=n) a-=n;
b>>=;
}
return tmp;
}
__int64 multimod(__int64 a,__int64 m,__int64 n) //乘法快速幂
{
__int64 tmp=;
a%=n;
while(m)
{
if(m&) tmp=multi(tmp,a,n);
a=multi(a,a,n);
m>>=;
}
return tmp;
}
__int64 gcd(__int64 a, __int64 b) //迭代算法
{
while(b)
{
__int64 c=a%b;
a=b;
b=c;
}
return a;
}
bool Miller_Rabin(__int64 n) //大素数判断
{
if(n<)
return false;
if(n==)
return true;
if(!(n&))
return false;
__int64 k=,j,m,a;
m=n-;
while(!(m&))
{
m>>=;
k++;
}
for(int i=; i<; i++)
{
if(pri[i]>=n)
return true;
a=multimod(pri[i],m,n);
if(a==)
continue;
for(j=; j<k; j++)
{
if(a==n-)
break;
a=multi(a,a,n);
}
if(j==k)
return false;
}
return true;
}
__int64 pollard_rho(__int64 c,__int64 n) //查找因数
{
__int64 i,x,y,k,d;
i=;
x=y=rand()%n;
k=;
do
{
i++;
d=gcd(n+y-x,n);
if(d> && d<n)
return d;
if(i==k)
{
y=x;
k<<=;
}
x=(multi(x,x,n)+n-c)%n;
}
while(y!=x);
return n;
}
__int64 rho(__int64 n)
{
if(Miller_Rabin(n))
return n;
__int64 t=n;
while(t>=n)
t=pollard_rho(rand()%(n-)+,n);
__int64 a=rho(t);
__int64 b=rho(n/t);
return a<b? a:b;
} __int64 ans[],flag;
void rhoAll(__int64 n) //计算全部质因子
{
if(Miller_Rabin(n))
{
ans[flag++]=n;
return;
}
__int64 t=n;
while(t>=n)
t=pollard_rho(rand()%(n-)+,n);
rhoAll(t);
rhoAll(n/t);
return;
}
int main()
{
//freopen("in.txt","r",stdin);
int t;
__int64 n;
scanf("%d",&t);
while(t--)
{
flag=;
scanf("%I64d",&n);
if(Miller_Rabin(n))
printf("Prime\n");
else
{
//rhoAll(n);
printf("%I64d\n",rho(n));
}
/*for(int i=0;i<flag;i++) //输出全部质因子
if(i!=flag-1)
printf("%I64d ",ans[i]);
else
printf("%I64d\n",ans[i]);*/
}
return ;
}

POJ 1811 大素数判断的更多相关文章

  1. 【转】大素数判断和素因子分解【miller-rabin和Pollard_rho算法】

    集训队有人提到这个算法,就学习一下,如果用到可以直接贴模板,例题:POJ 1811 转自:http://www.cnblogs.com/kuangbin/archive/2012/08/19/2646 ...

  2. POJ 1811 大整数素数判断 Miller_Rabin

    #include <cstdio> #include <cstring> #include <cmath> #include <ctime> #incl ...

  3. 大素数判断和素因子分解(miller-rabin,Pollard_rho算法) 玄学快

    大数因数分解Pollard_rho 算法 复杂度o^(1/4) #include <iostream> #include <cstdio> #include <algor ...

  4. 大素数判断和素因子分解(miller-rabin,Pollard_rho算法)

    #include<stdio.h> #include<string.h> #include<stdlib.h> #include<time.h> #in ...

  5. HDU 4910 Problem about GCD 找规律+大素数判断+分解因子

    Problem about GCD Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  6. poj 1811 随机素数和大数分解(模板)

    Sample Input 2 5 10 Sample Output Prime 2 模板学习: 判断是否是素数,数据很大,所以用miller,不是的话再用pollard rho分解 miller : ...

  7. 大素数判断(miller-Rabin测试)

    题目:PolandBall and Hypothesis A. PolandBall and Hypothesis time limit per test 2 seconds memory limit ...

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

    素数判定Miller_Rabin算法详解: http://blog.csdn.net/maxichu/article/details/45458569 大数因数分解Pollard_rho算法详解: h ...

  9. GCDLCM 【米勒_拉宾素数检验 (判断大素数)】

    GCDLCM 题目链接(点击) 题目描述 In FZU ACM team, BroterJ and Silchen are good friends, and they often play some ...

随机推荐

  1. iOS-性能优化3

    iOS-性能优化3 UITableView性能优化与卡顿问题 1.最常用的就是cell的重用, 注册重用标识符 如果不重用cell时,每当一个cell显示到屏幕上时,就会重新创建一个新的cell 如果 ...

  2. 无服务端纯前台导出数据到Excel-JSExcelXML.js 使用指南

    JSExcelXML 使用指南 先来个效果预览 a.前端显示 b.导出excel效果 表头部分 表尾部分 1.功能描述 JsExcelXml 采用js生成excel中可显示的xml格式文本,将输出文本 ...

  3. ES6 对象解构

    ES6 对象解构 第一眼看到,什么鬼? const { body } = document `` 其实等于: const body = document.body ``` http://es6.rua ...

  4. 《C与指针》第八章练习

    本章问题 1.根据下面给出的声明和数据,对每个表达式进行求值并写出它的值.在对每个表达式进行求值时使用原先给出的值(也就是说,某个表达式的结果不影响后面的表达式).假定ints数组在内存中的起始位置是 ...

  5. PNG使用技巧 PNG的使用技巧

    PNG的格式和透明度 这个Fireworks会比较清楚,打开Fireworkd优化面板,可以清楚看到png有3种不同深度的格式:png8.png24.png32. 其中,在优化面板选择png8,可发现 ...

  6. 文本溢出text-overflow和文本阴影text-shadow

    前面的话 CSS3新增了一些关于文本的样式,其中text-overflow文本溢出和text-shadow文本阴影有些特别.因为它们有对应的overflow溢出属性和box-shadow盒子阴影属性. ...

  7. SharePoint Server 2013开发之旅(二):使用在线的开发人员网站进行SharePoint App开发

    上一篇我已经介绍了新版本的SharePoint Server提供了四种主要的开发场景,其中一个全新的App开发模型让我们眼前一亮.这一篇我将介绍如何在线进行SharePoint App开发. 谈到Sh ...

  8. 用ticons指令结合ImageMagickDisplay工具批量生成Android适应图片

    用ticons指令结合ImageMagickDisplay工具批量生成Android适应图片 ticons的用法可以百度 这里记录下具体的编译方法 在安装了ticons和ImageMagickDisp ...

  9. OpenJudge1700:八皇后问题 //不属于基本法的基本玩意

    1700:八皇后问题//搜索 总时间限制:  10000ms 内存限制:  65536kB 描述 在国际象棋棋盘上放置八个皇后,要求每两个皇后之间不能直接吃掉对方. 输入 无输入. 输出 按给定顺序和 ...

  10. c#设计模式之简单工厂

    1.面向对象的3大属性,封装.继承.多态,以一个加单的计算机为例: 创建一个父类Operation 有两个属性 和一个计算方法(虚方法),便于子类重写: public class Operation ...