Description

 

Input

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

Output

第一行CAS(CAS<=350,代表测试数据的组数)

以下CAS行:每行一个数字,保证是在64位长整形范围内的正数。

对于每组测试数据:输出Prime,代表它是质数,或者输出它最大的质因子,代表它是和数

Sample Input

6
2
13
134
8897

1234567654321
1000000000000

Sample Output

Prime
Prime
67
41
4649

5

HINT

数据范围:

保证cas<=350,保证所有数字均在64位长整形范围内。

Source

题解:

这是miller rabin和pollard rho的裸题,具体见:http://blog.csdn.net/thy_asdf/article/details/51347390

code:

 #include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
#define lowbit(x) ((x)&(-(x)))
using namespace std;
typedef long long int64;
char ch;
bool ok;
void read(int &x){
ok=;
for (ch=getchar();!isdigit(ch);ch=getchar()) if (ch=='-') ok=;
for (x=;isdigit(ch);x=x*+ch-'',ch=getchar());
if (ok) x=-x;
}
void read(int64 &x){
ok=;
for (ch=getchar();!isdigit(ch);ch=getchar()) if (ch=='-') ok=;
for (x=;isdigit(ch);x=x*+ch-'',ch=getchar());
if (ok) x=-x;
}
int cases;
int64 n;
const int prime[]={,,,,,,,,,};
int64 mul(int64 a,int64 b,int64 mod){
int64 d=((long double)a/mod*b+1E-);
int64 res=a*b-d*mod;
if (res<) res+=mod;
return res;
/*int64 t;
for (t=0;b;b>>=1,a<<=1,a%=mod) if (b&1) t=(t+a)%mod;
return t;*/
}
int64 ksm(int64 a,int64 b,int64 mod){
int64 t;
for (t=;b;b>>=,a=mul(a,a,mod)) if (b&) t=mul(t,a,mod);
return t;
}
bool miller_rabin(int64 n){
for (int i=;i<;i++) if (n==prime[i]) return true;
if (!(n&)) return false;
int64 bit=lowbit(n-),s=,d;
while (bit!=) s++,bit>>=;
d=(n-)>>s;
for (int i=;i<;i++){
int64 x=ksm(prime[i],d,n);
for (int j=;j<=s;j++){
int64 xx=mul(x,x,n);
if (xx==&&x!=n-&&x!=) return false;
x=xx;
}
if (x!=) return false;
}
return true;
}
int cnt;
int64 list[];
int64 random(int64 lim){return ((1LL*rand()<<)+rand())%lim;}
int64 f(int64 x,int64 mod,int64 c){return (mul(x,x,mod)+c+mod)%mod;}
int64 pollard_rho(int64 n,int64 c){
int64 x,y,d=; x=random(n),y=f(x,n,c);
while (d==){
d=__gcd(abs(x-y),n);
x=f(x,n,c),y=f(f(y,n,c),n,c);
}
return d;
}
void work(int64 n){
if (miller_rabin(n)){list[++cnt]=n;return;}
int64 d=pollard_rho(n,random(n-));
while (d==n||d==) d=pollard_rho(n,random(n));
work(d),work(n/d);
}
void decompose(int64 n){
cnt=,work(n),sort(list+,list+cnt+);
printf("%lld\n",list[cnt]);
}
int main(){
srand();
for (read(cases);cases;cases--){
read(n);
if (miller_rabin(n)) puts("Prime");
else decompose(n);
}
return ;
}

bzoj3667: Rabin-Miller算法的更多相关文章

  1. 【BZOJ3667】Rabin-Miller算法(Pollard_rho)

    [BZOJ3667]Rabin-Miller算法(Pollard_rho) 题面 呜,权限题,别问我是怎么做的(我肯定没有权限号啊) 第一行:CAS,代表数据组数(不大于350),以下CAS行,每行一 ...

  2. 【BZOJ-3667】Rabin_Miller算法 随机化判素数

    3667: Rabin-Miller算法 Time Limit: 60 Sec  Memory Limit: 512 MBSubmit: 983  Solved: 302[Submit][Status ...

  3. 【bzoj3667】Rabin-Miller算法

    3667: Rabin-Miller算法 Time Limit: 60 Sec  Memory Limit: 512 MBSubmit: 1200  Solved: 363[Submit][Statu ...

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

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

  5. 模式字符串匹配问题(KMP算法)

    这两天又看了一遍<算法导论>上面的字符串匹配那一节,下面是实现的几个程序,可能有错误,仅供参考和交流. 关于详细的讲解,网上有很多,大多数算法及数据结构书中都应该有涉及,由于时间限制,在这 ...

  6. Leetcode #28. Implement strStr()

    Brute Force算法,时间复杂度 O(mn) def strStr(haystack, needle): m = len(haystack) n = len(needle) if n == 0: ...

  7. Google Interview University - 坚持完成这套学习手册,你就可以去 Google 面试了

    作者:Glowin链接:https://zhuanlan.zhihu.com/p/22881223来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 原文地址:Google ...

  8. USACO chapter1

    几天时间就把USACO chapter1重新做了一遍,发现了自己以前许多的不足.蒽,现在的程序明显比以前干净很多,而且效率也提高了许多.继续努力吧,好好的提高自己.这一章主要还是基本功的训练,没多少的 ...

  9. LintCode ---- 刷题总结

    对于一个给定的 source 字符串和一个 target 字符串,你应该在 source 字符串中找出 target 字符串出现的第一个位置(从0开始).如果不存在,则返回 -1. 基本:两重for循 ...

  10. 九章lintcode作业题

    1 - 从strStr谈面试技巧与代码风格 必做题: 13.字符串查找 要求:如题 思路:(自写AC)双重循环,内循环读完则成功 还可以用Rabin,KMP算法等 public int strStr( ...

随机推荐

  1. mysql选择联合索引还是单索引?索引列应该使用哪一个最有效?深入測试探讨

    先建表 CREATE TABLE `menu_employee` ( `Id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键,无实际意义', `emplo ...

  2. 自己动手写CPU之第七阶段(7)——乘累加指令的实现

    将陆续上传本人写的新书<自己动手写CPU>.今天是第30篇.我尽量每周四篇 亚马逊的销售地址例如以下.欢迎大家围观呵! http://www.amazon.cn/dp/b00mqkrlg8 ...

  3. iOS开源项目推荐|下拉刷新

    MJRefresh - 仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能.可以自定义上下拉刷新的文字说明. CBStoreHouseRefresh ...

  4. HDU2001java

    import java.util.*;import java.text.DecimalFormat;class Main{public static void main(String args[]){ ...

  5. 这种写法用过没:string.Format("{0,-10}", 8)

    1 2 3 4 var s1 = string.Format("{0,-10}", 8); var s2 = string.Format("{0,10}", 8 ...

  6. pcap支持Python2.7.8解决办法

    pcap库只支持到python2.5. pip install pcap在python2.7.8找不到. 只需要将网盘的2个文件放到python安装目录下lib/site-package文件夹即可 链 ...

  7. 微信小程序开闸,关于入口、推广、场景的一些观察与思考

    今夜(1月9号)零点,微信小程序正式上线.在体验了很多款小程序后,我对小程序的使用场景有了更多的认识.以下是一些想法,欢迎交流. 一.小程序的"入口"在哪儿? 1.只有访问过的小程 ...

  8. C#如何配置应用程序域

    转载:http://www.csharpwin.com/csharpspace/9175r9023.shtml 您可以使用 AppDomainSetup 类,为新应用程序域提供带有配置信息的公共语言运 ...

  9. 解析包时出现错误,用代码安装apk出现问题

    Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(file),"appli ...

  10. Touch事件or手机卫士面试题整理回答(二)

    Touch事件or手机卫士面试题整理回答(二) 自定义控件 1. Touch事件的传递机制 顶级View->父View->子View,不处理逆向返回 OnInterceptTouchEve ...