好像卡常,第10个点一直TLE~

Code:

  1. #include <bits/stdc++.h>
  2. #define ll long long
  3. #define ull unsigned long long
  4. #define setIO(s) freopen(s".in","r",stdin)
  5. using namespace std;
  6. set<ll>S;
  7. map<ll,int>pp;
  8. map<ll,int>::iterator it;
  9. int Array[20]={2,3,5,7,11,13,17,19};
  10. ll mult(ll x,ll y,ll mod)
  11. {
  12. ll tmp=(long double)x/mod*y;
  13. return ((ull)x*y-(ull)tmp*mod+(ull)mod)%mod;
  14. }
  15. ll qpow(ll base,ll k,ll mod)
  16. {
  17. ll tmp=1;
  18. for(;k;k>>=1,base=mult(base,base,mod))
  19. if(k&1) tmp=mult(tmp,base,mod);
  20. return tmp;
  21. }
  22. int isprime(ll x)
  23. {
  24. if(x<=2) return 1;
  25. int i,j,k;
  26. ll cur,a,pre;
  27. for(k=0,cur=x-1;cur%2==0;cur/=2) ++k;
  28. for(i=0;i<8;++i)
  29. {
  30. if(x==Array[i]) return 1;
  31. a=pre=qpow(Array[i],cur,x);
  32. for(j=1;j<=k;++j)
  33. {
  34. a=mult(a,a,x);
  35. if(a==1&&pre!=1&&pre!=x-1) return 0;
  36. pre=a;
  37. }
  38. if(a!=1) return 0;
  39. }
  40. return 1;
  41. }
  42. ll F(ll x,ll c,ll mod)
  43. {
  44. return (mult(x,x,mod)+c)%mod;
  45. }
  46. ll pollard_rho(ll x)
  47. {
  48. int k,step;
  49. ll s=0,t=0,c=rand()%(x-1)+1,val=1,d;
  50. for(k=1;;k<<=1,s=t,val=1)
  51. {
  52. for(step=1;step<=k;++step)
  53. {
  54. t=F(t,c,x);
  55. val=mult(val,abs(s-t),x);
  56. if(step%127==0)
  57. {
  58. d=__gcd(val,x);
  59. if(d>1) return d;
  60. }
  61. }
  62. d=__gcd(val,x);
  63. if(d>1) return d;
  64. }
  65. }
  66. void solve(ll x)
  67. {
  68. if(isprime(x))
  69. {
  70. S.insert(x);
  71. return;
  72. }
  73. ll p=x;
  74. for(;p>=x;) p=pollard_rho(x);
  75. for(;x%p==0;) x/=p;
  76. solve(x),solve(p);
  77. }
  78. set<ll>::iterator l;
  79. int main()
  80. {
  81. int i,j,n;
  82. // setIO("input");
  83. srand((unsigned)time(NULL));
  84. scanf("%d",&n);
  85. for(i=1;i<=n;++i)
  86. {
  87. ll a;
  88. S.clear(),scanf("%lld",&a),solve(a);
  89. for(l=S.begin();l!=S.end();l++)
  90. {
  91. if((*l)==1) continue;
  92. for(;a%(*l)==0;)
  93. {
  94. a/=(*l), pp[(*l)]++;
  95. }
  96. }
  97. }
  98. ll re=1;
  99. for(it=pp.begin();it!=pp.end();it++)
  100. re=mult(re,(it->second+1),998244353);
  101. printf("%I64d\n",re);
  102. return 0;
  103. }

  

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. docker CMD 和 ENTRYPOINT 区别

    昨天用Dockerfile来启动mongodb的集群,启动参数--replSet死活没执行,最后就决定研究一哈cmd和entrypoint.但是上网看了一些资料个人觉得讲的不好,还是没有说出根本的东西 ...

  2. 怎样使用构造函数: Vue()?

    1. 新建一个 .html 文件 => 引入一个在线的 vue 库 => 写一个带 id 的 html 标签 => 写一个 script 标签, 这里的 vApp 是 Vue() 这 ...

  3. Java lesson16homework

    package lesson16; /** * 1. 随机生成4个0到9的整数,组成一个序列(使用LinkedList<Integer>存储) 例如:3  6  4  4 2. 然后要求用 ...

  4. c# mvc权限系统

    登陆界面可以用index1,现在这个是仿照这个写的 登陆后的界面.模板都是套的,数据那个easyui自己写的 后台直接三层架构,dapper连处理数据后面加了autofac demo地址:https: ...

  5. C#异步编程学习笔记之-async和await(续)

    书接上文,本篇主要记录的内容要点:1.针对async和await在实际应用中的使用方式:2.异步方法返回值(有返回值和无返回值)的两种情况: 示例一(无返回值): using System; usin ...

  6. docker基础知识

    兴起于2010年,2013年docker开源. 什么是docker? built ship run 官方定位: Docker is a world's leading software contain ...

  7. 使用 “Unicode 字符集 ” 使用错误,应该使用 “使用多字节字符集”

    “void ATL::CStringT<BaseType,StringTraits>::Format(const wchar_t *,...)”: 不能将参数 1 从“const char ...

  8. [leetcode] 题解记录 11-20

    博客园markdown太烂, 题解详情https://github.com/TangliziGit/leetcode/blob/master/solution/11-20.md Leetcode So ...

  9. 【Git的基本操作九】ssh免密登录

    SSH免密登录 1. 进入用户家目录 cd ~ 2. 删除原有的 .ssh 目录 rm -r .ssh 3. 运行命令生成 .ssh 目录 ssh-keygen -t rsa -C github或gi ...

  10. jeesite表字段太多导致不能自动生成那张表的代码——————jetty 之 form too large | form too many keys 异常

    看了Jetty的源码才发现,jetty限制了Form提交数据的大小,该源码类来自jetty lib库下的jetty-server-7.6.16.v20140903.jar包下的 org.eclipse ...