CF1033D Divisors Pollard-rho
好像卡常,第10个点一直TLE~
Code:
- #include <bits/stdc++.h>
- #define ll long long
- #define ull unsigned long long
- #define setIO(s) freopen(s".in","r",stdin)
- using namespace std;
- set<ll>S;
- map<ll,int>pp;
- map<ll,int>::iterator it;
- int Array[20]={2,3,5,7,11,13,17,19};
- ll mult(ll x,ll y,ll mod)
- {
- ll tmp=(long double)x/mod*y;
- return ((ull)x*y-(ull)tmp*mod+(ull)mod)%mod;
- }
- ll qpow(ll base,ll k,ll mod)
- {
- ll tmp=1;
- for(;k;k>>=1,base=mult(base,base,mod))
- if(k&1) tmp=mult(tmp,base,mod);
- return tmp;
- }
- int isprime(ll x)
- {
- if(x<=2) return 1;
- int i,j,k;
- ll cur,a,pre;
- for(k=0,cur=x-1;cur%2==0;cur/=2) ++k;
- for(i=0;i<8;++i)
- {
- if(x==Array[i]) return 1;
- a=pre=qpow(Array[i],cur,x);
- for(j=1;j<=k;++j)
- {
- a=mult(a,a,x);
- if(a==1&&pre!=1&&pre!=x-1) return 0;
- pre=a;
- }
- if(a!=1) return 0;
- }
- return 1;
- }
- ll F(ll x,ll c,ll mod)
- {
- return (mult(x,x,mod)+c)%mod;
- }
- ll pollard_rho(ll x)
- {
- int k,step;
- ll s=0,t=0,c=rand()%(x-1)+1,val=1,d;
- for(k=1;;k<<=1,s=t,val=1)
- {
- for(step=1;step<=k;++step)
- {
- t=F(t,c,x);
- val=mult(val,abs(s-t),x);
- if(step%127==0)
- {
- d=__gcd(val,x);
- if(d>1) return d;
- }
- }
- d=__gcd(val,x);
- if(d>1) return d;
- }
- }
- void solve(ll x)
- {
- if(isprime(x))
- {
- S.insert(x);
- return;
- }
- ll p=x;
- for(;p>=x;) p=pollard_rho(x);
- for(;x%p==0;) x/=p;
- solve(x),solve(p);
- }
- set<ll>::iterator l;
- int main()
- {
- int i,j,n;
- // setIO("input");
- srand((unsigned)time(NULL));
- scanf("%d",&n);
- for(i=1;i<=n;++i)
- {
- ll a;
- S.clear(),scanf("%lld",&a),solve(a);
- for(l=S.begin();l!=S.end();l++)
- {
- if((*l)==1) continue;
- for(;a%(*l)==0;)
- {
- a/=(*l), pp[(*l)]++;
- }
- }
- }
- ll re=1;
- for(it=pp.begin();it!=pp.end();it++)
- re=mult(re,(it->second+1),998244353);
- printf("%I64d\n",re);
- return 0;
- }
CF1033D Divisors Pollard-rho的更多相关文章
- POJ 1811 Prime Test (Pollard rho 大整数分解)
题意:给出一个N,若N为素数,输出Prime.若为合数,输出最小的素因子.思路:Pollard rho大整数分解,模板题 #include <iostream> #include < ...
- 整数(质因子)分解(Pollard rho大整数分解)
整数分解,又称质因子分解.在数学中,整数分解问题是指:给出一个正整数,将其写成几个素数的乘积的形式. (每个合数都可以写成几个质数相乘的形式,这几个质数就都叫做这个合数的质因数.) .试除法(适用于范 ...
- Pollard Rho因子分解算法
有一类问题,要求我们将一个正整数x,分解为两个非平凡因子(平凡因子为1与x)的乘积x=ab. 显然我们需要先检测x是否为素数(如果是素数将无解),可以使用Miller-Rabin算法来进行测试. Po ...
- Pollard rho算法+Miller Rabin算法 BZOJ 3668 Rabin-Miller算法
BZOJ 3667: Rabin-Miller算法 Time Limit: 60 Sec Memory Limit: 512 MBSubmit: 1044 Solved: 322[Submit][ ...
- 初学Pollard Rho算法
前言 \(Pollard\ Rho\)是一个著名的大数质因数分解算法,它的实现基于一个神奇的算法:\(MillerRabin\)素数测试(关于\(MillerRabin\),可以参考这篇博客:初学Mi ...
- 【Luogu】P4358密钥破解(Pollard Rho)
题目链接 容易发现如果我们求出p和q这题就差不多快变成一个sb题了. 于是我们就用Pollard Rho算法进行大数分解. 至于这个算法的原理,emmm 其实也不是很清楚啦 #include<c ...
- Miller-Rabin 素性测试 与 Pollard Rho 大整数分解
\(\\\) Miller-Rabin 素性测试 考虑如何检验一个数字是否为素数. 经典的试除法复杂度 \(O(\sqrt N)\) 适用于询问 \(N\le 10^{16}\) 的时候. 如果我们要 ...
- BZOJ_4802_欧拉函数_MR+pollard rho+欧拉函数
BZOJ_4802_欧拉函数_MR+pollard rho+欧拉函数 Description 已知N,求phi(N) Input 正整数N.N<=10^18 Output 输出phi(N) Sa ...
- BZOJ_3667_Rabin-Miller算法_Mille_Rabin+Pollard rho
BZOJ_3667_Rabin-Miller算法_Mille_Rabin+Pollard rho Description Input 第一行:CAS,代表数据组数(不大于350),以下CAS行,每行一 ...
- 浅谈 Miller-Robbin 与 Pollard Rho
前言 $Miller-Robbin$ 与 $Pollard Rho$ 虽然都是随机算法,不过用起来是真的爽. $Miller Rabin$ 算法是一种高效的质数判断方法.虽然是一种不确定的质数判断法, ...
随机推荐
- docker CMD 和 ENTRYPOINT 区别
昨天用Dockerfile来启动mongodb的集群,启动参数--replSet死活没执行,最后就决定研究一哈cmd和entrypoint.但是上网看了一些资料个人觉得讲的不好,还是没有说出根本的东西 ...
- 怎样使用构造函数: Vue()?
1. 新建一个 .html 文件 => 引入一个在线的 vue 库 => 写一个带 id 的 html 标签 => 写一个 script 标签, 这里的 vApp 是 Vue() 这 ...
- Java lesson16homework
package lesson16; /** * 1. 随机生成4个0到9的整数,组成一个序列(使用LinkedList<Integer>存储) 例如:3 6 4 4 2. 然后要求用 ...
- c# mvc权限系统
登陆界面可以用index1,现在这个是仿照这个写的 登陆后的界面.模板都是套的,数据那个easyui自己写的 后台直接三层架构,dapper连处理数据后面加了autofac demo地址:https: ...
- C#异步编程学习笔记之-async和await(续)
书接上文,本篇主要记录的内容要点:1.针对async和await在实际应用中的使用方式:2.异步方法返回值(有返回值和无返回值)的两种情况: 示例一(无返回值): using System; usin ...
- docker基础知识
兴起于2010年,2013年docker开源. 什么是docker? built ship run 官方定位: Docker is a world's leading software contain ...
- 使用 “Unicode 字符集 ” 使用错误,应该使用 “使用多字节字符集”
“void ATL::CStringT<BaseType,StringTraits>::Format(const wchar_t *,...)”: 不能将参数 1 从“const char ...
- [leetcode] 题解记录 11-20
博客园markdown太烂, 题解详情https://github.com/TangliziGit/leetcode/blob/master/solution/11-20.md Leetcode So ...
- 【Git的基本操作九】ssh免密登录
SSH免密登录 1. 进入用户家目录 cd ~ 2. 删除原有的 .ssh 目录 rm -r .ssh 3. 运行命令生成 .ssh 目录 ssh-keygen -t rsa -C github或gi ...
- jeesite表字段太多导致不能自动生成那张表的代码——————jetty 之 form too large | form too many keys 异常
看了Jetty的源码才发现,jetty限制了Form提交数据的大小,该源码类来自jetty lib库下的jetty-server-7.6.16.v20140903.jar包下的 org.eclipse ...