BZOJ3667:Rabin-Miller算法(Pollard-Rho)
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位长整形范围内。
Solution
Code
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define LL long long
using namespace std; LL T,maxn,x;
LL prime[]={,,,,,,,,}; LL Mul(LL a,LL b,LL MOD)
{
LL tmp=a*b-(LL)((long double)a*b/MOD+0.1)*MOD;
return tmp<?tmp+MOD:tmp;
} LL Qpow(LL a,LL b,LL MOD)
{
LL ans=;
while (b)
{
if (b&) ans=Mul(ans,a,MOD);
a=Mul(a,a,MOD); b>>=;
}
return ans;
} LL gcd(LL a,LL b) {return b==?a:gcd(b,a%b);} bool Miller_Rabin(LL n)
{
if (n==) return ;
if (n< || n%==) return ;
LL m=n-, l=;
while (m%==) ++l, m>>=;
for (int i=; i<; ++i)
{
LL p=prime[i], w=Qpow(p,m,n);
if (w== || w==n- || p==n) continue;
for (int j=; j<=l; ++j)
{
LL u=Mul(w,w,n);
if (u== && w!= && w!=n-) return ;
w=u;
}
if (w!=) return ;
}
return ;
} LL Pollard_Rho(LL n,LL c)
{
LL x=rand()%n,y=x,p=,k=;
for (LL i=; p==; ++i)
{
x=(Mul(x,x,n)+c)%n;
p=x>y?x-y:y-x;
p=gcd(p,n);
if (i==k) y=x,k+=k;
}
return p;
} void Solve(LL n)
{
if (n==) return;
if (Miller_Rabin(n)) {maxn=max(maxn,n); return;}
LL t=n;
while (t==n) t=Pollard_Rho(n,rand()%(n-)+);
Solve(t); Solve(n/t);
} int main()
{
scanf("%lld",&T);
while (T--)
{
scanf("%lld",&x);
maxn=;
Solve(x);
if (maxn==x) puts("Prime");
else printf("%lld\n",maxn);
}
}
BZOJ3667:Rabin-Miller算法(Pollard-Rho)的更多相关文章
- HDU 3864 D_num Miller Rabin 质数推断+Pollard Rho大整数分解
链接:http://acm.hdu.edu.cn/showproblem.php? pid=3864 题意:给出一个数N(1<=N<10^18).假设N仅仅有四个约数.就输出除1外的三个约 ...
- 数学--数论--随机算法--Pollard Rho 大数分解算法 (带输出版本)
RhoPollard Rho是一个著名的大数质因数分解算法,它的实现基于一个神奇的算法:MillerRabinMillerRabin素数测试. 操作流程 首先,我们先用MillerRabinMille ...
- 数学--数论--随机算法--Pollard Rho 大数分解算法(纯模板带输出)
ACM常用模板合集 #include <bits/stdc++.h> using namespace std; typedef long long ll; ll pr; ll pmod(l ...
- Pollard rho算法+Miller Rabin算法 BZOJ 3668 Rabin-Miller算法
BZOJ 3667: Rabin-Miller算法 Time Limit: 60 Sec Memory Limit: 512 MBSubmit: 1044 Solved: 322[Submit][ ...
- Miller Rabin素数检测与Pollard Rho算法
一些前置知识可以看一下我的联赛前数学知识 如何判断一个数是否为质数 方法一:试除法 扫描\(2\sim \sqrt{n}\)之间的所有整数,依次检查它们能否整除\(n\),若都不能整除,则\(n\)是 ...
- Pollard Rho 算法简介
\(\text{update 2019.8.18}\) 由于本人将大部分精力花在了cnblogs上,而不是洛谷博客,评论区提出的一些问题直到今天才解决. 下面给出的Pollard Rho函数已给出散点 ...
- Pollard Rho算法浅谈
Pollard Rho介绍 Pollard Rho算法是Pollard[1]在1975年[2]发明的一种将大整数因数分解的算法 其中Pollard来源于发明者Pollard的姓,Rho则来自内部伪随机 ...
- 初学Pollard Rho算法
前言 \(Pollard\ Rho\)是一个著名的大数质因数分解算法,它的实现基于一个神奇的算法:\(MillerRabin\)素数测试(关于\(MillerRabin\),可以参考这篇博客:初学Mi ...
- BZOJ_3667_Rabin-Miller算法_Mille_Rabin+Pollard rho
BZOJ_3667_Rabin-Miller算法_Mille_Rabin+Pollard rho Description Input 第一行:CAS,代表数据组数(不大于350),以下CAS行,每行一 ...
- Miller-Rabin 素性测试 与 Pollard Rho 大整数分解
\(\\\) Miller-Rabin 素性测试 考虑如何检验一个数字是否为素数. 经典的试除法复杂度 \(O(\sqrt N)\) 适用于询问 \(N\le 10^{16}\) 的时候. 如果我们要 ...
随机推荐
- [日常] MySQL的预处理技术测试
MySQL预处理技术:1.减轻服务器压力2.防止sql注入,把传递过去的危险字符也只当做参数处理3.将sql语句强制一分为二:第一部分为前面相同的命令和结构部分,第二部分为后面可变的数据部分基本使用 ...
- SpringMVC中文件上传
在SpringMVC中上传文件是比较方便的.主要分为以下几个步骤: 1)在applicationContext.xml中增加相应类的引用 <bean id="multipartReso ...
- 面向对象(static关键字的特点)
static关键字的特点 * a:随着类的加载而加载 * b:优先于对象存在 * c:被类的所有对象共享 * 举例:咱们班级的学生应该共用同一个班级编号. * 其实这个特点也是在告诉我们什么时候使用静 ...
- mybatis-plus的集成与使用
Mybatis-Plus: Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发.提高效率而生. 官方网站:http://m ...
- MS SQL Server数据库在线管理工具
MS SQL Server数据库以其优异的性能,被广泛使用,特别是政务,医疗行业.但是远程维护挺不方便的,目前有一款基于WEB的工具TreeSoft数据库管理系统. 免安装,直接解压就可以用了.直接通 ...
- IDEA下的第一个springBoot
1.第一步打开File->New->Project,SDK根据自己的需要选择,我这边选的是java7 2.Next之后 设置group 和artifact,根据自己的需要进行修改. 3.导 ...
- 对MVC模式与MVVM模式的认识
MVC模式与MVVM模式目的一样,主要是分离模型(model)和视图(view),具体介绍如下. 名词介绍 MVC模式:指的是模型(Model)-- 视图(View)-- 控制器(Controller ...
- 将ArcGIS Server的JSON转化为SHP文件
# -*- coding: utf-8 -*- # -------------------------------------------------------------------------- ...
- android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )及屏幕适配
1 Android手机目前常见的分辨率 1.1 手机常见分辨率: 4:3VGA 640*480 (Video Graphics Array)QVGA 320*240 (Quarter VGA ...
- 使用ember-cli脚手架快速构建项目
步骤: 安装Ember. 创建一个新应用程序. 定义路由. 编写一个UI组件. 构建您的应用程序以部署到生产环境. 安装Ember 您可以使用npm(Node.js包管理器,你需要安装node.js) ...