题意:给定大整数n,求其质因数分解的最小质数幂

n<=1e18

思路:常规分解算法肯定不行

考虑答案大于1的情况只有3种:质数的完全平方,质数的完全立方,以及p^2*q^3,p,q>=1三种形式

前两种可以暴力判

第三种必定有一个小于10^(18/5)的因子,大概是3800

迭代分解,用vector存一下具体的情况

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. typedef unsigned int uint;
  5. typedef unsigned long long ull;
  6. typedef pair<int,int> PII;
  7. typedef pair<ll,ll> Pll;
  8. typedef vector<int> VI;
  9. typedef vector<PII> VII;
  10. //typedef pair<ll,ll>P;
  11. #define N 1000010
  12. #define M 200010
  13. #define fi first
  14. #define se second
  15. #define MP make_pair
  16. #define pb push_back
  17. #define pi acos(-1)
  18. #define mem(a,b) memset(a,b,sizeof(a))
  19. #define rep(i,a,b) for(int i=(int)a;i<=(int)b;i++)
  20. #define per(i,a,b) for(int i=(int)a;i>=(int)b;i--)
  21. #define lowbit(x) x&(-x)
  22. #define Rand (rand()*(1<<16)+rand())
  23. #define id(x) ((x)<=B?(x):m-n/(x)+1)
  24. #define ls p<<1
  25. #define rs p<<1|1
  26.  
  27. const int MOD=1e9+,inv2=(MOD+)/;
  28. double eps=1e-;
  29. int INF=1e9;
  30. int inf=0x7fffffff;
  31. int dx[]={-,,,};
  32. int dy[]={,,-,};
  33.  
  34. ll p[],mn[];
  35.  
  36. int read()
  37. {
  38. int v=,f=;
  39. char c=getchar();
  40. while(c<||<c) {if(c=='-') f=-; c=getchar();}
  41. while(<=c&&c<=) v=(v<<)+v+v+c-,c=getchar();
  42. return v*f;
  43. }
  44.  
  45. ll check2(ll n)
  46. {
  47. ll t=sqrt(n);
  48. if(t*t==n) return t;
  49. return ;
  50. }
  51.  
  52. ll check3(ll n)
  53. {
  54. ll t=pow(n,1.0/)+0.5;
  55. if(t*t*t==n) return t;
  56. return ;
  57. }
  58.  
  59. VII solve(ll n)
  60. {
  61. if(n<)
  62. {
  63. VII re;
  64. for(int i=;i<=p[]&&p[i]*p[i]<=n;i++)
  65. if(n%p[i]==)
  66. {
  67. int s=;
  68. while(n%p[i]==)
  69. {
  70. s++;
  71. n/=p[i];
  72. }
  73. re.push_back(MP(p[i],s));
  74. }
  75. if(n>) re.push_back(MP(n,));
  76. return re;
  77. }
  78. int t;
  79. if(t=check2(n))
  80. {
  81. VII re=solve(t);
  82. for(int i=;i<re.size();i++) re[i].se*=;
  83. return re;
  84. }
  85. if(t=check3(n))
  86. {
  87. VII re=solve(t);
  88. for(int i=;i<re.size();i++) re[i].se*=;
  89. return re;
  90. }
  91. ll t1=,t2=;
  92. for(int i=;i<=p[]&&p[i]*p[i]*p[i]*p[i]*p[i]<=n;i++)
  93. if(n%p[i]==)
  94. {
  95. t1=p[i];
  96. while(n%p[i]==)
  97. {
  98. t2++;
  99. n/=p[i];
  100. }
  101. break;
  102. }
  103. if(t1==) return VII(,MP(,));
  104. VII re=solve(n);
  105. re.push_back(MP(t1,t2));
  106. return re;
  107. }
  108.  
  109. int main()
  110. {
  111. //freopen("1.in","r",stdin);
  112. //freopen("1.out","w",stdout);
  113. rep(i,,)
  114. {
  115. if(!mn[i])
  116. {
  117. p[++p[]]=i;
  118. mn[i]=p[];
  119. }
  120. for(int j=;j<=mn[i]&&i*p[j]<=;j++) mn[i*p[j]]=j;
  121. }
  122. int cas=read();
  123. while(cas--)
  124. {
  125. ll n;
  126. scanf("%I64d",&n);
  127. VII t=solve(n);
  128. if(t.empty()) printf("1\n");
  129. else
  130. {
  131. int ans=;
  132. for(int i=;i<t.size();i++) ans=min(ans,t[i].se);
  133. printf("%d\n",ans);
  134. }
  135. }
  136.  
  137. return ;
  138. }

【HDOJ6623】Minimal Power of Prime(Powerful Number)的更多相关文章

  1. HDU6623 Minimal Power of Prime (简单数论)

    题面 T ≤ 50   000 T\leq50\,000 T≤50000 组数据: 输入一个数 N N N ( 2 ≤ N ≤ 1 0 18 2\leq N\leq 10^{18} 2≤N≤1018) ...

  2. 【SPOJ】Longest Common Substring II (后缀自动机)

    [SPOJ]Longest Common Substring II (后缀自动机) 题面 Vjudge 题意:求若干个串的最长公共子串 题解 对于某一个串构建\(SAM\) 每个串依次进行匹配 同时记 ...

  3. 【BZOJ1717】产奶的模式(后缀数组)

    [BZOJ1717]产奶的模式(后缀数组) 题面 权限题 hihocoder 洛谷 题解 \(hihocoder\)里面讲的非常好了 这题要求的就是最长可重叠重复K次子串 所谓相同的子串 我们可以理解 ...

  4. 【BZOJ2154】Crash的数字表格(莫比乌斯反演)

    [BZOJ2154]Crash的数字表格(莫比乌斯反演) 题面 BZOJ 简化题意: 给定\(n,m\) 求\[\sum_{i=1}^n\sum_{j=1}^mlcm(i,j)\] 题解 以下的一切都 ...

  5. 【BZOJ2588】Count On a Tree(主席树)

    [BZOJ2588]Count On a Tree(主席树) 题面 题目描述 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lastans和v这两个节点间第 ...

  6. 【BZOJ3436】小K的农场(差分约束)

    [BZOJ3436]小K的农场(差分约束) 题面 由于BZOJ巨慢无比,使用洛谷美滋滋 题解 傻逼差分约束题, 您要是不知道什么是差分约束 您就可以按下\(Ctrl+W\)了 #include< ...

  7. 【Luogu3732】[HAOI2017]供给侧改革(Trie树)

    [Luogu3732][HAOI2017]供给侧改革(Trie树) 题面 洛谷 给定一个纯随机的\(01\)串,每次询问\([L,R]\)之间所有后缀两两之间的\(LCP\)的最大值. 题解 一个暴力 ...

  8. 【BZOJ5339】[TJOI2018]教科书般的亵渎(斯特林数)

    [BZOJ5339][TJOI2018]教科书般的亵渎(斯特林数) 题面 BZOJ 洛谷 题解 显然交亵渎的次数是\(m+1\). 那么这题的本质就是让你求\(\sum_{i=1}^n i^{m+1} ...

  9. 【BZOJ1814】Ural 1519 Formula 1 (插头dp)

    [BZOJ1814]Ural 1519 Formula 1 (插头dp) 题面 BZOJ Vjudge 题解 戳这里 上面那个链接里面写的非常好啦. 然后说几个点吧. 首先是关于为什么只需要考虑三进制 ...

随机推荐

  1. request.getParameter() 和request.getAttribute()

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/wrs120/article/details/79287607[相同点] 1.都是HttpServle ...

  2. TensorFlow学习笔记7-深度前馈网络(多层感知机)

    深度前馈网络(前馈神经网络,多层感知机) 神经网络基本概念 前馈神经网络在模型输出和模型本身之间没有反馈连接;前馈神经网络包含反馈连接时,称为循环神经网络. 前馈神经网络用有向无环图表示. 设三个函数 ...

  3. NornJ-javascript模版引擎

    NornJ-javascript模版引擎 NornJ是一个渲染效率高,语法可读性好,可扩展性超强,适用场景丰富的javascript模板引擎. 学习网址:https://www.npmjs.com/p ...

  4. mybatis初步理解

    mybatis概念   mybatis 是一款轻量级的orm的数据持久框架,封装jdbc 对开发提供了便利,但是性能会比jdbc低,从开发的角度来说,现在是比较流行的 掌握上比较容易,也支持缓存,级联 ...

  5. "SQLServer复制需要有实际的服务器名称才能连接到服务器,请指定实际的服务器名"

    最近在学习SQL SERVER的高级复制技术的时候,遇到一个小问题,就是用本地SQL SERVER连接服务器的数据库时,在查看复制功能的发布服务器时,连接不上,弹出一个错误提示框架,如下:原来在自己本 ...

  6. Log4Net使用详解(续)

    转:http://blog.csdn.net/zhoufoxcn/article/details/6029021 说明自从上次在2008年在博客上发表过有关log4net的用法介绍文章之后(网址:ht ...

  7. Java 和操作系统交互,你猜会发生什么?

    作者:lonelysnow https://www.jianshu.com/p/7f6832d61880 结合 CPU 理解一行 Java 代码是怎么执行的 根据冯·诺依曼思想,计算机采用二进制作为数 ...

  8. mongoDB关系型数据库的对比

    一.基本操作 1.mongoDB和关系型数据库对比 对比项 mongoDB mysql oracle 表 集合list 二维表 表的一行数据 文档document 一条记录 表字段 键key 字段fi ...

  9. win7 开启 telnet 服务

    如何重新开启win7的telnet服务 “控制面板”-->“系统和安全”-->“允许远程访问”-->“远程桌面”-->“选择用户”,添加可telnet的用户. “控制面板”-- ...

  10. PHP Web Server 实例

    通过WebService,我们可以调用部署在其它地方的程序,而不用关心被调用的程序是在什么平台用什么语言编写的.这里我们使用php调用. 在php4时代调用WebService大部分使用的nusoap ...