两个没什么卵用的算法。

只放一下模板:

BZOJ3667

//BZOJ 3667
//by Cydiater
//2017.2.20
#include <iostream>
#include <queue>
#include <map>
#include <ctime>
#include <cmath>
#include <cstring>
#include <string>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
#include <iomanip>
#include <bitset>
#include <set>
#include <vector>
#include <complex>
using namespace std;
#define ll long long
#define up(i,j,n)	for(ll i=j;i<=n;i++)
#define down(i,j,n)	for(ll i=j;i>=n;i--)
#define cmax(a,b)	a=max(a,b)
#define cmin(a,b)	a=min(a,b)
inline ll read(){
	char ch=getchar();ll x=0,f=1;
	while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
	return x*f;
}
ll N,ans=0,a[]={2,3,5,7,11,13,17,19,23,29};
namespace solution{
	ll gcd(ll a,ll b){return !b?a:gcd(b,a%b);}
	ll mul(ll x,ll y,ll mod){
		ll tmp=0;
		while(y){
			if(y&1)(tmp+=x)%=mod;
			(x+=x)%=mod;y>>=1;
		}
		return tmp;
	}
	ll quick_pow(ll base,ll ind,ll mod){
		ll tmp=1;
		while(ind){
			if(ind&1)tmp=mul(tmp,base,mod);
			base=mul(base,base,mod);ind>>=1;
		}
		return tmp;
	}
	bool OK(ll base,ll num){
		if(!(num&1)||num==1)return 0;
		ll ind=num-1;
		while(!(ind&1))ind>>=1;
		ll Num=quick_pow(base,ind,num);
		if(Num==1)return 1;
		while(ind<num){
			if(Num==num-1)return 1;
			Num=mul(Num,Num,num);ind<<=1;
		}
		return 0;
	}
	bool isPrime(ll num){
		up(i,0,9){
			if(num==a[i])return 1;
			if(!OK(a[i],num))return 0;
		}
		return 1;
	}
	ll rho(ll num,ll c){
		ll i=1,k=2,x=rand()%(num-1)+1,y=x;
		while(true){
			i++;
			x=(mul(x,x,num)+c)%num;
			ll d=gcd((y-x+num)%num,num);
			if(d>1&&d<num)return d;
			if(x==y)return num;
			if(i==k){y=x;k<<=1;}
		}
	}
	void find(ll num,ll k){
		if(num==1||num<=ans)return;
		if(isPrime(num)){
			cmax(ans,num);
			return;
		}
		ll p=num,c=k;
		while(p>=num)p=rho(num,k--);
		find(p,c);find(num/p,c);
	}
	void Solve(){
		N=read();ans=0;
		while(N--){
			ll num=read();ans=0;
			find(num,120);
			if(ans==num)puts("Prime");
			else printf("%lld\n",ans);
		}
}
int main(){
	freopen("input.in","r",stdin);
	using namespace solution;
	Solve();
	return 0;
}

Rubin-Miller与Pollard Rho的更多相关文章

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

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

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

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

  3. Miller-Rabin 素性测试 与 Pollard Rho 大整数分解

    \(\\\) Miller-Rabin 素性测试 考虑如何检验一个数字是否为素数. 经典的试除法复杂度 \(O(\sqrt N)\) 适用于询问 \(N\le 10^{16}\) 的时候. 如果我们要 ...

  4. 浅谈 Miller-Robbin 与 Pollard Rho

    前言 $Miller-Robbin$ 与 $Pollard Rho$ 虽然都是随机算法,不过用起来是真的爽. $Miller Rabin$ 算法是一种高效的质数判断方法.虽然是一种不确定的质数判断法, ...

  5. Pollard Rho 算法简介

    \(\text{update 2019.8.18}\) 由于本人将大部分精力花在了cnblogs上,而不是洛谷博客,评论区提出的一些问题直到今天才解决. 下面给出的Pollard Rho函数已给出散点 ...

  6. Pollard Rho算法浅谈

    Pollard Rho介绍 Pollard Rho算法是Pollard[1]在1975年[2]发明的一种将大整数因数分解的算法 其中Pollard来源于发明者Pollard的姓,Rho则来自内部伪随机 ...

  7. POJ 1811 Prime Test (Pollard rho 大整数分解)

    题意:给出一个N,若N为素数,输出Prime.若为合数,输出最小的素因子.思路:Pollard rho大整数分解,模板题 #include <iostream> #include < ...

  8. 整数(质因子)分解(Pollard rho大整数分解)

    整数分解,又称质因子分解.在数学中,整数分解问题是指:给出一个正整数,将其写成几个素数的乘积的形式. (每个合数都可以写成几个质数相乘的形式,这几个质数就都叫做这个合数的质因数.) .试除法(适用于范 ...

  9. Pollard Rho因子分解算法

    有一类问题,要求我们将一个正整数x,分解为两个非平凡因子(平凡因子为1与x)的乘积x=ab. 显然我们需要先检测x是否为素数(如果是素数将无解),可以使用Miller-Rabin算法来进行测试. Po ...

  10. 初学Pollard Rho算法

    前言 \(Pollard\ Rho\)是一个著名的大数质因数分解算法,它的实现基于一个神奇的算法:\(MillerRabin\)素数测试(关于\(MillerRabin\),可以参考这篇博客:初学Mi ...

随机推荐

  1. 2018No-java面试知识

    1.框架 1. springboot比spring的优点? 2. Springmvc的基本流程? 3. 微服务之间调用不会慢吗? 4. 大图片和大数据库怎么存储? 5. spring事物?四大特征, ...

  2. Blocks POJ - 1390 多维dp

    题意:有一排box,各有不同的颜色.你可以通过点击某个box使得与其相邻的同色box全部消掉,然后你可以得到的分数为消去长度的平方,问怎样得到最高分? 题解:考虑用一维dp,/*dp[i]为1~i个b ...

  3. CCCC L2-008. 最长对称子串

    https://www.patest.cn/contests/gplt/L2-008 题解:想法是扫一遍string,将每一个s[i]作为对称轴,写一个判定函数:不断向两边延伸直到不是回文串为止. ...

  4. LoadRunner-参数化(参数间关联)

    多用户测试,每个用户账号对应一个密码,账号和密码需要一 一关联才能登录成功. 1.在已经对账号进行参数化后,选中密码的值->右键选择Replace with a Parameter,参数名为pa ...

  5. zookeeper源码导入

    1 搭建步骤 1.1 到github中下载该项目 项目地址 https://github.com/apache/zookeeper.下载.zip包到本地解压. 解压后文件目录: 1.2 使用ant对源 ...

  6. libevent 网络IO分析

    libevent 网络IO分析 Table of Contents 1. 简介 2. 简单使用与入门 2.1. 定时器-timeout 超时回调 2.2. 信号事件 2.3. 读取 socket 3. ...

  7. sql server 以10分钟分组 统计人数

    请问针对时间段从每天早上7点开始统计每十分钟人 解决思路: 我以前做过一个关于月份的,是说每3个月以分组,其实是一样的.不过可能啊,整体数据量大会有问题.如果你只是求一天的,那绝对没问题.[1]如果只 ...

  8. read 命令

    read 用来接收标准输入 #!/bin/bash read -t -p "Please input a number:" number echo $number //把键盘输入的 ...

  9. Tensorflow(二)

    1---------------- 试用tensorflow的模块,必须配套tensorflow的方法 import tensorflow as tf a=3 ##定义 行向量 w=tf.Variab ...

  10. What is Druid?

    Druid is a data store designed for high-performance slice-and-dice analytics ("OLAP"-style ...