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),输出一个数,表示
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 (简单数论)的更多相关文章
- 2019杭电多校第四场hdu6623 Minimal Power of Prime
Minimal Power of Prime 题目传送门 解题思路 先打\(N^\frac{1}{5}\)内的素数表,对于每一个n,先分解\(N^\frac{1}{5}\)范围内的素数,分解完后n变为 ...
- [2019杭电多校第四场][hdu6623]Minimal Power of Prime
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6623 题目大意为求一个数的唯一分解的最小幂次.即120=23*31*51则答案为1. 因为数字太大不能 ...
- 2019HDU多校Minimal Power of Prime——分段讨论&&思维
题目 将 $n$($1 < n \leq 10^{18}$)质因数分解,求质因数幂的最小值. 分析 直接质因数分解,不太行. 可以这样想,对小区间质因数分解,n变小了,再枚举答案. 打印1-10 ...
- 2019hdu多校 Minimal Power of Prime
题目链接:Click here 题目大意:求一个数分解质因数后的最小幂指数 Solution: 首先,我们肯定是不能直接暴力求解的 我们先考虑筛出1e4范围以内的所有质数,把x所有这个范围内的质因子筛 ...
- HDU 6623 Minimal Power of Prime
Time limit 1000 ms Memory limit 65536 kB OS Windows 中文题意 给一个数n,设将n质因数分解后可以得到 \[n=\prod_{i=1}^{\omega ...
- HDU 6623"Minimal Power of Prime"(数学)
传送门 •题意 给你一个大于 1 的正整数 n: 它可以分解成不同的质因子的幂的乘积的形式,问这些质因子的幂中,最小的幂是多少. •题解 定义 $ans$ 表示最终答案: ①如果 $ans \ge 5 ...
- HDU 6623 Minimal Power of Prime(数学)
传送门 •题意 给你一个大于 1 的正整数 n: 它可以分解成不同的质因子的幂的乘积的形式,问这些质因子的幂中,最小的幂是多少. •题解 把[1,10000]内的素数筛出来,然后对于每个素$P$数遍历 ...
- 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 ...
- 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 ...
随机推荐
- 看看CabloyJS是如何实现编辑页面脏标记的
应用场景 我们在使用Word.Excel时,当修改了内容之后在标题栏会显示脏标记,从而可以明确的告知用户内容有变动.此外,如果在没有保存的情况下关闭窗口,系统会弹出提示框,让用户选择是否放弃修改 那么 ...
- 掘地三尺搞定 Redis 与 MySQL 数据一致性问题
Redis 拥有高性能的数据读写功能,被我们广泛用在缓存场景,一是能提高业务系统的性能,二是为数据库抵挡了高并发的流量请求,点我 -> 解密 Redis 为什么这么快的秘密. 把 Redis 作 ...
- vue大型电商项目尚品汇(后台篇)day04
昨天太晚就没来得及更新,今天是spu管理界面,这个界面一共有三个界面需要切换,完成了两个界面,而且今天的难度在于最后两个章节,富有一定的逻辑性,当然中间也有很多需要注意的,比如ElementUI的照片 ...
- Golang并发编程——goroutine、channel、sync
并发与并行 并发和并行是有区别的,并发不等于并行. 并发 两个或多个事件在同一时间不同时间间隔发生.对应在Go中,就是指多个 goroutine 在单个CPU上的交替运行. 并行 两个或者多个事件在同 ...
- 聊聊 Netty 那些事儿之 Reactor 在 Netty 中的实现(创建篇)
本系列Netty源码解析文章基于 4.1.56.Final版本 在上篇文章<聊聊Netty那些事儿之从内核角度看IO模型>中我们花了大量的篇幅来从内核角度详细讲述了五种IO模型的演进过程以 ...
- 机器学习基础:用 Lasso 做特征选择
大家入门机器学习第一个接触的模型应该是简单线性回归,但是在学Lasso时往往一带而过.其实 Lasso 回归也是机器学习模型中的常青树,在工业界应用十分广泛.在很多项目,尤其是特征选择中都会见到他的影 ...
- 《ASP.NET Core 6框架揭秘》样章发布[200页/5章]
作为<ASP.NET Core 3 框架揭秘>的升级版,<ASP.NET Core 6框架揭秘>不仅针对ASP.NET Core 6的新特性进行了修订,并添加了若干原来没有的内 ...
- CentOS查看操作系统安装时间信息:
CentOS查看系统安装时间信息: 方法1:[root@logserver ~]# ll /boot/|egrep -i "(grub|lost\+found)" 方法2:[ro ...
- 如何等待ajax完成再执行相应操作
ajax广泛应用于异步请求,对于大多数业务来说,这是十分方便的,但对于一些特殊的业务,ajax的异步性会起到相反的作用. 例如在ajax请求成功后,后续的操作需要依赖ajax执行成功后的相应操作. / ...
- 聊聊 C++ 中几类特殊成员函数
一:背景 在 C# 中要说类默认给我们定义的特殊成员函数,莫过于 构造函数,但在 C++ 中这样的特殊函数高达 6 种,有必要整合一下聊一聊. 二:特殊成员函数 1. 默认构造函数 和 C# 一样,很 ...