题面

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

#include<map>
#include<cmath>
#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define MAXN 10005
#define ENDL putchar('\n')
#define LL long long
#define DB double
#define lowbit(x) ((-x) & (x))
LL read() {
LL f = 1,x = 0;char s = getchar();
while(s < '0' || s > '9') {if(s=='-')f = -f;s = getchar();}
while(s >= '0' && s <= '9') {x=x*10+(s-'0');s = getchar();}
return f * x;
}
int n,m,i,j,s,o,k;
int MOD = 1;
inline LL safemul(LL a,LL b,LL MOD) {
return a*b%MOD;
// LL nm = a*b-((LL)((long DB)a/MOD*b+0.5)*MOD);
// return (nm%MOD+MOD)%MOD;
}
LL qkpow(LL a,LL b,LL MOD) {
LL res = 1;
while(b > 0) {
if(b & 1) {
if(res*a >= MOD) res = safemul(res,a,MOD)+MOD;
else res = safemul(res,a,MOD);
}
if(a * a >= MOD) a = safemul(a,a,MOD)+MOD;
else a = safemul(a,a,MOD);
b >>= 1;
}return res;
}
LL L;
LL PHI(LL x) {
LL as = x;
for(int i = 2;i *1ll* i <= x;i ++) {
if(x % i == 0) {
as = as/i*(i-1);
while(x % i == 0) x /= i;
}
}
if(x > 1) as = as / x * (x-1);
return as;
}
bool comp(LL a,LL b,LL c) {
LL res = 1;
for(int i = 1;i <= b;i ++) {
if(res > c/a) return 1;
res = res * a;
}return res > c;
}
int p[MAXN],cnt;
bool f[MAXN];
void sieve(int n) {
for(int i = 2;i <= n;i ++) {
if(!f[i]) p[++ cnt] = i;
for(int j = 1;j <= cnt && i*p[j] <= n;j ++) {
f[i*p[j]] = 1;
if(i%p[j] == 0) break;
}
}return ;
}
int depcheck(int tm,LL &MOD) {
int ans = 64;
for(int ii = 1;ii <= cnt;ii ++) {
int i = p[ii];
if(MOD % i == 0) {
int ct = 0;
while(MOD % i == 0) MOD /= i,ct ++;
ans = min(ans,ct);
}
}
return ans;
}
int main() {
sieve(4000);
int T = read();
while(T --) {
LL N = read();
int as = depcheck(5,N);
LL y4 = (LL)(pow((DB)N,0.25)+0.1);
LL y3 = (LL)(pow((DB)N,1.0/3.0)+0.1);
LL y2 = (LL)(sqrt((DB)N)+0.1);
if(N > 1) {
if(y4*y4*y4*y4 == N) as = min(as,4);
else if(y3*y3*y3 == N) as = min(as,3);
else if(y2*y2 == N) as = min(as,2);
else as = 1;
}
printf("%d\n",as);
}
return 0;
}

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. Win10 pycharm中显示PyTorch tensorboard图

    import numpy import numpy as np import torch import matplotlib.pyplot as plt import torch.nn as nn i ...

  2. 全球共有多少MySQL实例在运行?这里有一份数据

    摘要 Shadowserver Foundation在5月31日发布了一份全网的MySQL扫描报告,共发现了暴露在公网的360万个MySQL实例.因为这份报告基数够大,而且信息也非常完整,从数据库专业 ...

  3. react-router v6对比react-router v5

    简述:     1. react-router v6 原生支持typeScript ; 安装方法 npm install react-router-dom@6    2. react-router v ...

  4. 【故障公告】取代 memcached 的 redis 出现问题造成网站故障

    6月19日开始,我们将博客站点的缓存服务器从 memcached 换成了 redis,稳定运行了3天,今天上午访问高峰突然出现问题,在 11:00-12:30 期间影响了网站的正常访问,由此给您带来麻 ...

  5. Java获取汉字的大小写拼音码(汉字的拼音首字母)

    import java.io.UnsupportedEncodingException; /** * 获取拼音码 * * @author xmj * */ public class GetPinyin ...

  6. raid划分及创建

    RAID 的划分 RAID 0 - RAID 0是最早出现的,是数据分条技术.组建磁盘阵列中最简单的一种形式,可以提高整个磁盘的性能和吞吐量,利用率100%,缺点:一但磁盘损坏,raid0将失效,数据 ...

  7. MYSQL的事务和索引

    事务 什么是事务 事务就是将一组SQL语句放在同一批次内去执行 如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行 MySQL事务处理只支持InnoDB和BDB数据表类型 事务的ACID原则 ...

  8. 使用高斯Redis实现二级索引

    摘要:高斯Redis 搭建业务二级索引,低成本,高性能,实现性能与成本的双赢. 本文分享自华为云社区<华为云GaussDB(for Redis)揭秘第21期:使用高斯Redis实现二级索引> ...

  9. docker快速安装openvas

    项目地址 1.更换国内docker源 2.docker run -d -p 443:443 -e PUBLIC_HOSTNAME=此处填你宿主机IP --name openvas mikesplain ...

  10. Java实现动态代理

    1.实现InvocationHandler接口 这种方式只能针对接口实现类的实例对象. interface Hello{ public void sayHello(); } class HelloIm ...