好像卡常,第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的更多相关文章

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

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

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

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

  3. Pollard Rho因子分解算法

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

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

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

  5. 初学Pollard Rho算法

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

  6. 【Luogu】P4358密钥破解(Pollard Rho)

    题目链接 容易发现如果我们求出p和q这题就差不多快变成一个sb题了. 于是我们就用Pollard Rho算法进行大数分解. 至于这个算法的原理,emmm 其实也不是很清楚啦 #include<c ...

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

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

  8. BZOJ_4802_欧拉函数_MR+pollard rho+欧拉函数

    BZOJ_4802_欧拉函数_MR+pollard rho+欧拉函数 Description 已知N,求phi(N) Input 正整数N.N<=10^18 Output 输出phi(N) Sa ...

  9. BZOJ_3667_Rabin-Miller算法_Mille_Rabin+Pollard rho

    BZOJ_3667_Rabin-Miller算法_Mille_Rabin+Pollard rho Description Input 第一行:CAS,代表数据组数(不大于350),以下CAS行,每行一 ...

  10. 浅谈 Miller-Robbin 与 Pollard Rho

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

随机推荐

  1. Java 概述和编程基础

    First of all,Java概述: 类是Java程序设计的基石和基本单元: main()方法是程序的入口,它是共有的.静态的,参数String[] args表示一个字符串数组可以传入该程序,用来 ...

  2. 【已解决】Field injection is not recommended和Could not autowired. No beans of 'xxx' type found.

    目录 问题 解决办法 备注 问题 在项目中,我们使用Spring的@Autowired注解去引入其他类时有时候阿里的编码规约插件就会提示:"Field injection is not re ...

  3. 在Windows平台上运行Tomcat

    从之前的学习中知道,可以调用Bootstrap类将Toomcat作为一个独立的应用程序来运行,在Windows平台上,可以调用startup.bat批处理文件来启动Tomcat,或运行shutdown ...

  4. winfrom 界面时间动态加载

    Timer time1 = new Timer(); private void time1_Tick(object sender, EventArgs e) { lTime.Text = DateTi ...

  5. unity 打包Error:WebException: The remote server returned an error: (403) Forbidden.

    記一下在ios上打包出錯: UnityEditor.BuildPlayerWindow+BuildMethodException: 2 errors at UnityEditor.BuildPlaye ...

  6. sequelize学习笔记

    示例: const Sequelize = require('sequelize'); // 建立连接 const sequelize = new Sequelize('test', 'root', ...

  7. linux常用命令(4)

    linux常用命令(4) --- Vim编辑器与Shell命令脚本 如何使用vim编辑器来编写文档.配置主机名称.网卡参数以及yum仓库: 通过vim编辑器将Linux命令放入合适的逻辑测试语句(if ...

  8. except用法

    #!/usr/bin/expect set timeout 20 spawn ssh -l root 172.25.254.102 expect "(yes/no)?" send ...

  9. Java程序向MySql数据库中插入的中文数据变成了问号

    找到mysql的安装目录,修改my.ini文件 (1)如何找到my.ini文件 如果my.ini文件不在MySQL的安装目录下,可能放在隐藏目录,要先去找到ProgramData,(这里要先打开显示隐 ...

  10. [转]DSL-让你的 Ruby 代码更优秀

    https://ruby-china.org/topics/38428 以下摘录 DSL和Gpl DSL : domain-specific language.比如HTML是用于组织网页的‘语言’, ...