【BZOJ-3667】Rabin_Miller算法 随机化判素数
3667: Rabin-Miller算法
Time Limit: 60 Sec Memory Limit: 512 MB
Submit: 983 Solved: 302
[Submit][Status][Discuss]
Description
Input
第一行:CAS,代表数据组数(不大于350),以下CAS行,每行一个数字,保证在64位长整形范围内,并且没有负数。你需要对于每个数字:第一,检验是否是质数,是质数就输出Prime
第二,如果不是质数,输出它最大的质因子是哪个。
Output
第一行CAS(CAS<=350,代表测试数据的组数)
以下CAS行:每行一个数字,保证是在64位长整形范围内的正数。
对于每组测试数据:输出Prime,代表它是质数,或者输出它最大的质因子,代表它是和数
Sample Input
2
13
134
8897
1234567654321
1000000000000
Sample Output
Prime
67
41
4649
5
HINT
数据范围:
保证cas<=350,保证所有数字均在64位长整形范围内。
Source
Solution
我以为啊,这个Discuss很好
裸题,卡常..自己原来的板子被卡死了..于是换成网上的新版...
Code
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<ctime>
#include<cstdlib>
using namespace std;
long long read()
{
long long x=,f=; char ch=getchar();
while (ch<'' || ch>'') {if (ch=='-') f=-; ch=getchar();}
while (ch>='' && ch<='') {x=x*+ch-''; ch=getchar();}
return x*f;
}
long long X,maxz;
long long gcd(long long a,long long b)
{
if (b==) return a;
return gcd(b,a%b);
}
//long long mul(long long a,long long b,long long p)
//{
// if (b==0) return 0; if (b==1) return a%p;
// long long re;
// re=mul(a,b>>1,p);
// if ((b&1)==1) return (re+re+a)%p;
// else return (re+re)%p;
//}
long long mul(long long a,long long b,long long p)
{
long long tmp=(a*b-(long long)((long double)a/p*b+1e-)*p);
return tmp<?tmp+p:tmp;
}
long long quick_pow(long long a,long long b,long long p)
{
long long ans=; a%=p;
for (long long i=b; i; i>>=,a=mul(a,a,p))
if (i&) ans=mul(ans,a,p);
return ans;
}
bool check(long long a,long long n,long long r,long long s)
{
long long ans=quick_pow(a,r,n),p=ans;
for(int i=; i<=s; i++)
{
ans=mul(ans,ans,n);
if(ans==&&p!=&&p!=n-)return ;
p=ans;
}
if(ans!=)return ;else return ;
}
bool Robin_Miller(long long x)
{
if(x<=) return ;
if(x==) return ;
if(x%==) return ;
long long r=x-,s=;
while(r%==) r/=,s++;
for(int i=; i<; i++)
if(check(rand()%(x-)+,x,r,s))
return ;
return ;
}
long long Rho(long long x,long long t)
{
long long k=,a=rand()%x,b=a,p=;
for(long long i=; p==; i++)
{
a=(mul(a,a,x)+t)%x;
p=b>a?b-a:a-b;
p=gcd(x,p);
if(i==k) b=a,k+=k;
}
return p;
}
void work(long long x)
{
if(x==) return;
if(Robin_Miller(x)){maxz=max(x,maxz);return;}
long long t=x;
while(t==x) t=Rho(x,rand()%(x-)+);
work(t); work(x/t);
}
int main()
{
int n;n=read();
while (n--)
{
X=read(); maxz=;
work(X);
if (maxz==X) puts("Prime");
else printf("%lld\n",maxz);
}
return ;
}
论常数的差距....:So SAD.

【BZOJ-3667】Rabin_Miller算法 随机化判素数的更多相关文章
- Miller_raibin算法随机化检测素数 & Pollar_rho 算法分解大数
这几天一直再学习这些内容,也没有发一些博客,现在我觉得差不多了 首先基础是Miller_raibin随机化检测素数,顾名思义,随机化也就是有几率不对,但是很低,适用于大数快速检测,因为大数已经超出了我 ...
- 【刷题】BZOJ 3667 Rabin-Miller算法
Input 第一行:CAS,代表数据组数(不大于350),以下CAS行,每行一个数字,保证在64位长整形范围内,并且没有负数.你需要对于每个数字:第一,检验是否是质数,是质数就输出Prime 第二,如 ...
- BZOJ.3667.Rabin-Miller算法(MillerRabin PollardRho)
题目链接 Pollard_Rho:http://blog.csdn.net/thy_asdf/article/details/51347390 #include<cstdio> #incl ...
- bzoj 3667 Rabin-Miller算法
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #i ...
- bzoj 3667: Rabin-Miller算法【Miller-Rabin】
Miller-Rabin模板 #include<iostream> #include<cstdio> #include<algorithm> using names ...
- BZOJ 3667: Rabin-Miller算法 (Pollard-Rho 模板)
说实话,我知道每一步都干啥,但我完全不知道为啥这么做,也不知道为什么是正确的,反正会用就行了~ #include <cmath> #include <cstdio> #incl ...
- Pollard rho算法+Miller Rabin算法 BZOJ 3668 Rabin-Miller算法
BZOJ 3667: Rabin-Miller算法 Time Limit: 60 Sec Memory Limit: 512 MBSubmit: 1044 Solved: 322[Submit][ ...
- BZOJ 4898 [APIO2017] 商旅 | SPFA判负环 分数规划
BZOJ 4898 [APIO2017] 商旅 | SPFA判负环 分数规划 更清真的题面链接:https://files.cnblogs.com/files/winmt/merchant%28zh_ ...
- UVA10200-Prime Time/HDU2161-Primes,例题讲解,牛逼的费马小定理和欧拉函数判素数。
10200 - Prime Time 此题极坑(本菜太弱),鉴定完毕,9遍过. 题意:很简单的求一个区间 ...
随机推荐
- PAT 1014. 福尔摩斯的约会 (20)
大侦探福尔摩斯接到一张奇怪的字条:"我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm".大侦 ...
- 51nod lyk与gcd
1678 lyk与gcd 基准时间限制:2 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 这天,lyk又和gcd杠上了.它拥有一个n个数的数列,它想实现两种操作. 1:将 ai ...
- 表单验证——JavaScript和Jquery版
1.轻量级的JavaScript表单验证 在应用中引用 validator.min.js 文件 <script type="text/javascript" src=&quo ...
- Post model至Web Api
Post model可以解决多动态性的参数至Web Api中去,获取数据或是创建数据.如果一个对象有很多字段,需要对每一个字段进行查询或是在创建对象时,我们可以考虑使用model来作参数.这样不必在控 ...
- ios更新UI时请尝试使用performSelectorOnMainThread方法
最近开发项目时发现联网获取到数据后,使用通知方式让列表刷新会存在死机的问题. 经过上网查找很多文章,都建议使用异步更新的方式,可是依然崩溃. 最后尝试使用performSelectorOnMainTh ...
- C#TCP通讯框架
开源的C#TCP通讯框架 原来收费的TCP通讯框架开源了,这是一款国外的开源TCP通信框架,使用了一段时间,感觉不错,介绍给大家 框架名称是networkcomms 作者开发了5年多,目前已经停止开发 ...
- QT 网络编程一
QT如果要进行网络编程首先需要在.pro中添加如下代码:QT += network 在头文件中包含相关头文件 #include <QHostInfo> #include <QNetw ...
- Django admin 显示图片
我有一个表用来储存轮播图片,有一个 `picture` 字段储存的是图片的url,图片的 url 通过上传文件到 cdn 获得.目前这个表的编辑是通过自定义一个 `ModelForm`,然后重写 Dj ...
- 系统升级日记(4):如何快速的修改Infopath中的各种URL
摘要: 最近一段时间在公司忙于将各类系统进行升级,其最主要的目标有两个,一个是将TFS2010升级到TFS2013,另外一个是将SharePoint 2010升级到SharePoint 2013.本记 ...
- android服务之录音功能
该服务的作用是当打电话时自动录音. 布局文件 布局文件中开启录音服务 <?xml version="1.0" encoding="utf-8"?> ...