#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#define ll long long
using namespace std;
int n;
ll x,mx;
ll gcd(ll a,ll b)
{
if(!b)return a;
return gcd(b,a%b);
}
i64 mul(i64 a,i64 b,i64 c){
if(c<=2000000000ll)return a*b%c;
i64 r=a*b-i64(ld(a)/c*b)*c;
if(r>=c||r<=-c)r%=c;
return r>=0?r:r+c;
}
ll pow(ll a,ll b,ll p)
{
ll ans=1;a%=p;
while(b)
{
if(b&1)ans=mul(a,ans,p);
b>>=1;
a=mul(a,a,p);
}
return ans;
}
bool check(ll rd,ll n,ll r,ll s)
{
ll ans=pow(rd,r,n),p=ans;
for(int i=1;i<=s;i++)
{
ans=mul(ans,ans,n);
if(ans==1&&p!=1&&p!=n-1)return 1;
p=ans;
}
if(ans!=1)return 1;
return 0;
}
bool MR(ll n)
{
if(n<=1)return 0;
if(n==2)return 1;
if(n%2==0)return 0;
ll r=n-1,s=0;
while(r%2==0)r/=2,s++;
for(int i=0;i<10;i++)
{
if(check(rand()%(n-1)+1,n,r,s))return 0;
}
return 1;
}
ll rho(ll n,ll c)
{
ll k=2,x=rand()%n,y=x,p=1;
for(ll i=1;p==1;i++)
{
x=(mul(x,x,n)+c)%n;
if(y>x)p=y-x;
else p=x-y;
p=gcd(n,p);
if(i==k)y=x,k+=k;
}
return p;
}
void solve(ll n)
{
if(n==1)return ;
if(MR(n)){mx=max(n,mx);return;}
ll t=n;
while(t==n)t=rho(n,rand()%(n-1)+1);
solve(t);
solve(n/t);
}
int main()
{
scanf("%d",&n);
while(n--)
{
scanf("%lld",&x);
mx=0;
solve(x);
if(mx==x)puts("Prime");
else printf("%lld\n",mx);
}
return 0;
}

  

bzoj 3667 Rabin-Miller算法的更多相关文章

  1. 【刷题】BZOJ 3667 Rabin-Miller算法

    Input 第一行:CAS,代表数据组数(不大于350),以下CAS行,每行一个数字,保证在64位长整形范围内,并且没有负数.你需要对于每个数字:第一,检验是否是质数,是质数就输出Prime 第二,如 ...

  2. BZOJ.3667.Rabin-Miller算法(MillerRabin PollardRho)

    题目链接 Pollard_Rho:http://blog.csdn.net/thy_asdf/article/details/51347390 #include<cstdio> #incl ...

  3. bzoj 3667: Rabin-Miller算法【Miller-Rabin】

    Miller-Rabin模板 #include<iostream> #include<cstdio> #include<algorithm> using names ...

  4. BZOJ 3667: Rabin-Miller算法 (Pollard-Rho 模板)

    说实话,我知道每一步都干啥,但我完全不知道为啥这么做,也不知道为什么是正确的,反正会用就行了~ #include <cmath> #include <cstdio> #incl ...

  5. bzoj 2038 莫队算法

    莫队算法,具体的可以看10年莫涛的论文. 大题思路就是假设对于区间l,r我们有了一个答案,那么对于区间l,r+1,我们 可以暴力的转移一个答案,那么对于区间l1,r1和区间l2,r2,需要暴力处理 的 ...

  6. BZOJ 3571 画框 KM算法 最小乘积最大权匹配

    题意 有n个画框和n幅画.若第i幅画和第j个画框配对,则有平凡度Aij和违和度Bij,一种配对方案的总体不和谐度为∑Aij*∑Bij.求通过搭配能得到的最小不和谐度是多少. n <= 70. 分 ...

  7. BZOJ 3667 Pollard-rho &Miller-Rabin

    论O(1)快速乘和O(logn)快速乘的差距-. //By SiriusRen #include <cstdio> #include <algorithm> using nam ...

  8. Pollard rho算法+Miller Rabin算法 BZOJ 3668 Rabin-Miller算法

    BZOJ 3667: Rabin-Miller算法 Time Limit: 60 Sec  Memory Limit: 512 MBSubmit: 1044  Solved: 322[Submit][ ...

  9. Miller Rabin素数检测与Pollard Rho算法

    一些前置知识可以看一下我的联赛前数学知识 如何判断一个数是否为质数 方法一:试除法 扫描\(2\sim \sqrt{n}\)之间的所有整数,依次检查它们能否整除\(n\),若都不能整除,则\(n\)是 ...

随机推荐

  1. Geatpy遗传算法在曲线寻优上的初步探究

    园子里关于遗传算法的教案不少,但基于geatpy框架的并未多见,故分享此文以作参考,还望广大园友多多指教! Geatpy出自三所名校联合团队之手,是遗传算法领域的权威框架(python),其效率之高. ...

  2. Paxos共识算法

    Paxos共识算法 paxos是一族用来解决分布式系统共识的基础算法,共识过程就是在一组节点上达成一个一致的结果.由于节点可能会错误,通讯消息也可能会丢失,所以建立共识是一个比较复杂的过程. paxo ...

  3. NIO_通道之间传输数据

    通道之间传输数据 transferFrom() transferTo() @Test public void test3() throws IOException { FileChannel inCh ...

  4. spring boot之配置跨域

    在启动类中配置 @Bean public WebMvcConfigurer corsConfigurer() { return new WebMvcConfigurer() { @Override p ...

  5. 2018软工实践—Beta冲刺(3)

    队名 火箭少男100 组长博客 林燊大哥 作业博客 Beta 冲鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 软件接口编写修正 自动化测试脚本编写 技术文稿更新 展示GitHub当 ...

  6. PTA计算平均值(一波三折)

    PTA计算平均值( 一波三折) 现在为若干组整数分别计算平均值. 已知这些整数的绝对值都小于100,每组整数的数量不少于1个,不大于20个. 输入格式:首先输入K(不小于2,不大于20).接下来每一行 ...

  7. 014 C语言文法定义与C程序的推导过程

  8. 关于“scrum站立会议”

    每日站立会议是SCRUM方法中的一条关键实践,整个会议可能会比较混乱粗略,但推进进度的目标却非常清晰明确,并促使团队齐心协力朝共同目标迈进. 站立会议的功能很简单,作为一个以简短为特点的项目会议,所有 ...

  9. HDU 2061 Treasure the new start, freshmen!

    http://acm.hdu.edu.cn/showproblem.php?pid=2061 Problem Description background:A new semester comes , ...

  10. 佣金维护测试sql

    SELECT bmc.memberid , case then decode(bmc.source, , , 'TOPfitIBL') ELSE decode(bmc.source, , , 'TOP ...