题面

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),输出一个数,表示

N

N

N 质因数分解后,每个质因数的幂的最小值。

题解

妙妙题!

一种神奇的做法:

我们把

N

5

<

3

982

\sqrt[5]{N}<3\,982

5N

​<3982 以内的质数都筛出来,以便把

N

N

N 的

N

5

\leq\sqrt[5]{N}

≤5N

​ 的质因数都找到,统计次数,处理答案。然后把

N

N

N 里面的这些质因子全部除掉。这一步的时间大概在 500 左右。

用反证法,不难证明剩下的

N

N

N 最多只有 4 质因数,所以,要么存在质因数的幂为 1 (答案输出 1),如果不存在,要么是某个质数的平方,要么是三次方、四次方,这三者都可以求出

N

2

,

N

3

,

N

4

\sqrt[2]{N}~,~\sqrt[3]{N}~,~\sqrt[4]{N}

2N

​ , 3N

​ , 4N

​ 然后

O

(

1

)

O(1)

O(1) 判断。

CODE

  1. #include<map>
  2. #include<cmath>
  3. #include<queue>
  4. #include<cstdio>
  5. #include<cstring>
  6. #include<iostream>
  7. #include<algorithm>
  8. using namespace std;
  9. #define MAXN 10005
  10. #define ENDL putchar('\n')
  11. #define LL long long
  12. #define DB double
  13. #define lowbit(x) ((-x) & (x))
  14. LL read() {
  15. LL f = 1,x = 0;char s = getchar();
  16. while(s < '0' || s > '9') {if(s=='-')f = -f;s = getchar();}
  17. while(s >= '0' && s <= '9') {x=x*10+(s-'0');s = getchar();}
  18. return f * x;
  19. }
  20. int n,m,i,j,s,o,k;
  21. int MOD = 1;
  22. inline LL safemul(LL a,LL b,LL MOD) {
  23. return a*b%MOD;
  24. // LL nm = a*b-((LL)((long DB)a/MOD*b+0.5)*MOD);
  25. // return (nm%MOD+MOD)%MOD;
  26. }
  27. LL qkpow(LL a,LL b,LL MOD) {
  28. LL res = 1;
  29. while(b > 0) {
  30. if(b & 1) {
  31. if(res*a >= MOD) res = safemul(res,a,MOD)+MOD;
  32. else res = safemul(res,a,MOD);
  33. }
  34. if(a * a >= MOD) a = safemul(a,a,MOD)+MOD;
  35. else a = safemul(a,a,MOD);
  36. b >>= 1;
  37. }return res;
  38. }
  39. LL L;
  40. LL PHI(LL x) {
  41. LL as = x;
  42. for(int i = 2;i *1ll* i <= x;i ++) {
  43. if(x % i == 0) {
  44. as = as/i*(i-1);
  45. while(x % i == 0) x /= i;
  46. }
  47. }
  48. if(x > 1) as = as / x * (x-1);
  49. return as;
  50. }
  51. bool comp(LL a,LL b,LL c) {
  52. LL res = 1;
  53. for(int i = 1;i <= b;i ++) {
  54. if(res > c/a) return 1;
  55. res = res * a;
  56. }return res > c;
  57. }
  58. int p[MAXN],cnt;
  59. bool f[MAXN];
  60. void sieve(int n) {
  61. for(int i = 2;i <= n;i ++) {
  62. if(!f[i]) p[++ cnt] = i;
  63. for(int j = 1;j <= cnt && i*p[j] <= n;j ++) {
  64. f[i*p[j]] = 1;
  65. if(i%p[j] == 0) break;
  66. }
  67. }return ;
  68. }
  69. int depcheck(int tm,LL &MOD) {
  70. int ans = 64;
  71. for(int ii = 1;ii <= cnt;ii ++) {
  72. int i = p[ii];
  73. if(MOD % i == 0) {
  74. int ct = 0;
  75. while(MOD % i == 0) MOD /= i,ct ++;
  76. ans = min(ans,ct);
  77. }
  78. }
  79. return ans;
  80. }
  81. int main() {
  82. sieve(4000);
  83. int T = read();
  84. while(T --) {
  85. LL N = read();
  86. int as = depcheck(5,N);
  87. LL y4 = (LL)(pow((DB)N,0.25)+0.1);
  88. LL y3 = (LL)(pow((DB)N,1.0/3.0)+0.1);
  89. LL y2 = (LL)(sqrt((DB)N)+0.1);
  90. if(N > 1) {
  91. if(y4*y4*y4*y4 == N) as = min(as,4);
  92. else if(y3*y3*y3 == N) as = min(as,3);
  93. else if(y2*y2 == N) as = min(as,2);
  94. else as = 1;
  95. }
  96. printf("%d\n",as);
  97. }
  98. return 0;
  99. }

HDU6623 Minimal Power of Prime (简单数论)的更多相关文章

  1. 2019杭电多校第四场hdu6623 Minimal Power of Prime

    Minimal Power of Prime 题目传送门 解题思路 先打\(N^\frac{1}{5}\)内的素数表,对于每一个n,先分解\(N^\frac{1}{5}\)范围内的素数,分解完后n变为 ...

  2. [2019杭电多校第四场][hdu6623]Minimal Power of Prime

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6623 题目大意为求一个数的唯一分解的最小幂次.即120=23*31*51则答案为1. 因为数字太大不能 ...

  3. 2019HDU多校Minimal Power of Prime——分段讨论&&思维

    题目 将 $n$($1 < n \leq 10^{18}$)质因数分解,求质因数幂的最小值. 分析 直接质因数分解,不太行. 可以这样想,对小区间质因数分解,n变小了,再枚举答案. 打印1-10 ...

  4. 2019hdu多校 Minimal Power of Prime

    题目链接:Click here 题目大意:求一个数分解质因数后的最小幂指数 Solution: 首先,我们肯定是不能直接暴力求解的 我们先考虑筛出1e4范围以内的所有质数,把x所有这个范围内的质因子筛 ...

  5. HDU 6623 Minimal Power of Prime

    Time limit 1000 ms Memory limit 65536 kB OS Windows 中文题意 给一个数n,设将n质因数分解后可以得到 \[n=\prod_{i=1}^{\omega ...

  6. HDU 6623"Minimal Power of Prime"(数学)

    传送门 •题意 给你一个大于 1 的正整数 n: 它可以分解成不同的质因子的幂的乘积的形式,问这些质因子的幂中,最小的幂是多少. •题解 定义 $ans$ 表示最终答案: ①如果 $ans \ge 5 ...

  7. HDU 6623 Minimal Power of Prime(数学)

    传送门 •题意 给你一个大于 1 的正整数 n: 它可以分解成不同的质因子的幂的乘积的形式,问这些质因子的幂中,最小的幂是多少. •题解 把[1,10000]内的素数筛出来,然后对于每个素$P$数遍历 ...

  8. HDU 6623 Minimal Power of Prime(思维)题解

    题意: 已知任意大于\(1\)的整数\(a = p_1^{q_1}p_2^{q_2} \cdots p_k^{q_k}\),现给出\(a \in [2,1e18]\),求\(min\{q_i\},q ...

  9. 2019 Multi-University Training Contest 4 - 1010 - Minimal Power of Prime

    http://acm.hdu.edu.cn/showproblem.php?pid=6623 题意,给50000个1e18级别的数N,求它质因数分解里面的最小的指数(不算0) 比赛的时候给划了一个1e ...

随机推荐

  1. wsl2环境搭建

    序言 我电脑配置不高,开虚拟机跑linux总觉得太卡.最近才了解到windows早就上了wsl2--一款较为轻量的虚拟机软件.所以本篇博客偏笔记向,存粹记录以便多次使用. 环境 宿主机windows1 ...

  2. @vue/cli3+配置build命令构建测试包&正式包

    上一篇博客介绍了vue-cli2.x配置build命令构建测试包和正式包,但现在前端开发vue项目大多数使用新版@vue/cli脚手架搭建vue项目(vue create project-name) ...

  3. ESP8266 系统环境搭建

    1. 前言 因为ESP8266/ESP32这个开发环境没少折腾,是真没见过这么难搞又不清晰的环境. 简单开发可以使用Arduino IDE ,这个平台还是挺好的.开发使用Arduino的函数库,很高效 ...

  4. MySQL 8.0 Undo Tablespace管理

    目录 1. UNDO 基础概念 2. UNDO 相关参数 2.1 参数含义 3. UNDO 表空间运维 3.1 查看UNDO的基本信息 3.2 添加/active/inactive/删除UNDO表空间 ...

  5. GIF录制工具下载

    GIF录制工具(GifCam)下载地址: https://files.cnblogs.com/files/blogs/747754/GifCam.rar

  6. 线上问题定位利器 jprofiler

    1.导出dump windows: jps -l   查看Java进行 jmap -dump:format=b,file=webapi.hprof 20840 查看进程,根据进程号导出hprof文件 ...

  7. EasyExcel导出创建Excel下拉框

    话不多说,上才艺. 下面代码粘贴即用 /** * * 导出表格带下拉框 */ @GetMapping("exportBox") public void export(HttpSer ...

  8. java SWT中Label实时刷新当前时间

    同样最近在开发swt的一个项目,业务中的一个功能模块类似百度网盘的上传进度条 0/80. 即已上传0个,总共80个.效果展示要的就是实时刷新,2/80呀,15/80呀,针对这个,就有了这篇文章. 下面 ...

  9. Task.Run(), Task.Factory.StartNew() 和 New Task() 的行为不一致分析

    重现 在 .Net5 平台下,创建一个控制台程序,注意控制台程序的Main()方法如下: static async Task Main(string[] args) 方法的主体非常简单,使用Task. ...

  10. 记一次 .NET 某新能源系统 线程疯涨 分析

    一:背景 1. 讲故事 前段时间收到一个朋友的求助,说他的程序线程数疯涨,寻求如何解决. 等我分析完之后,我觉得这个问题很有代表性,所以拿出来和大家分享下,还是上老工具 WinDbg. 二: WinD ...