HDU6623 思维题(n分解成质因子的形式,问最小的幂是多少)
题目大意:给你一个数n,把它分解为素数的幂次的乘积的形式:n=p1^e1 * p2^e2 * .......pk^ek 求最小的幂次是多少
n=le18
分析:
首先我们肯定是不可以枚举1e18的因子的,因为sqrt(1e18)=1e9 ,这样铁超时,那么1s的时间我们是可以预处理出10000以内的素数,我们首先得意思到n在10000以后的素数的幂都不可能大于5了,这很好理解(10001)^5>1e18 , 所以我们可以先用10000以内的素数算出一个最小幂 和剩余数Y, 在枚举看看后面可不可能出来4,3,2,1的幂; 这也很容易寻找,(Y^(1/4))^4==Y,就说明有4的幂 , 3,2,1同理,需要注意,在枚举3的幂的时候,sqrt()的精度会不行,所以需要二分逼近一下
注意一点:对于后面的情况只会出现 a^1*b^2 a^1*b^3 a^2 a^3 a^4 所以我们只要判断 a^2 a^3 a^4这种情况,其他都是1
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll pr[];
bool vis[];
int tot;
void init(){
for(int i=;i<;i++){
if(vis[i]==){
pr[++tot]=i;
for(int j=i*;j<;j+=i)
vis[j]=;
}
}
}
bool fun(ll n){
ll l=,r=pow(n*1.0,1.0/3.0)+;
while(l<=r){
ll mid=(l+r)>>;
if(mid*mid*mid==n) return ;
else if(mid*mid*mid>n) r=mid-;
else l=mid+;
}
return ;
}
int main(){
init();
int _; scanf("%d",&_);
while(_--){
ll n;
scanf("%lld",&n);
int ans=0x3f3f3f3f; for(int i=;i<=tot;i++){
if(pr[i]>n) break; int x=;
while(n%pr[i]==){
n/=pr[i];
x++;
}
if(x!=)
ans=min(ans,x);
}
// cout<<n<<endl;
if(n==||ans==) printf("%d\n",ans);
else {
ll m1=(ll)sqrt(sqrt(n*1.0)*1.0);
ll m2=(ll)sqrt(n*1.0);
if(m1*m1*m1*m1==n) ans=min(ans,);
else if(fun(n)) ans=min(ans,);
else if(m2*m2==n) ans=min(ans,);
else ans=;
printf("%d\n",ans);
}
}
}
HDU6623 思维题(n分解成质因子的形式,问最小的幂是多少)的更多相关文章
- 【C/C++】任意大于1的整数分解成素数因子乘积的形式
// #include<stdio.h> #include<math.h> #include<malloc.h> int isprime(long n); void ...
- cf822D(质因子)
题目链接: http://codeforces.com/problemset/problem/822/D 题意: 输入 t, l, r 求 t0·f(l) + t1·f(l + 1) + ... + ...
- POJ2992:Divisors(求N!因子的个数,乘性函数,分解n!的质因子(算是找规律))
题目链接:http://poj.org/problem?id=2992 题目要求:Your task in this problem is to determine the number of div ...
- 整数(质因子)分解(Pollard rho大整数分解)
整数分解,又称质因子分解.在数学中,整数分解问题是指:给出一个正整数,将其写成几个素数的乘积的形式. (每个合数都可以写成几个质数相乘的形式,这几个质数就都叫做这个合数的质因数.) .试除法(适用于范 ...
- hdu6237 分解质因子
题意:给一堆石子,每次移动一颗到另一堆,要求最小次数使得,所有石子数gcd>1 题解:枚举所有质因子,然后找次数最小的那一个,统计次数时,我们可以事先记录下每堆石子余质因子 的和,对所有石子取余 ...
- Codeforces Round #828 (Div. 3) E2. Divisible Numbers (分解质因子,dfs判断x,y)
题目链接 题目大意 给定a,b,c,d四个数,其中a<c,b<c,现在让你寻找一对数(x,y),满足一下条件: 1. a<x<c,b<y<d 2. (x*y)%(a ...
- UVA 10780 Again Prime? No Time. 分解质因子
The problem statement is very easy. Given a number n you have to determine the largest power of m,no ...
- HDU 4497 GCD and LCM(分解质因子+排列组合)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4497 题意:已知GCD(x, y, z) = G,LCM(x, y, z) = L.告诉你G.L,求满 ...
- HDU 4135 Co-prime (容斥+分解质因子)
<题目链接> 题目大意: 给定区间[A,B](1 <= A <= B <= 10 15)和N(1 <=N <= 10 9),求出该区间中与N互质的数的个数. ...
随机推荐
- 啥是IOC ?啥是DI ?
1.IOC是什么? IOC (inverse of controll)控制反转:所谓控制反转就是把创建对象(bean),和维护对象(bean)的关系的权利从程序中转移到spring的容器(appl ...
- CS起源:实现狙击子弹加速
在前面的课程 FPS 游戏实现方框透视 中我们实现了对CS中游戏人物的透视效果,今天我们就来研究下狙击枪如何变成机关枪!原理很简单,直接去掉枪的上膛动画,配合无线子弹就完事了,这里只提供一种分析思路. ...
- kafka工作原理
https://blog.csdn.net/qq_29186199/article/details/80827085 https://www.jianshu.com/p/4bf007885116 ht ...
- python 元类 MetaClass
type() 动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的. 比方说我们要定义一个Hello的class,就写一个hello.py模块: class Hel ...
- 7.利用canvas和js画一个渐变的
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- ubuntu部署Java、Python开发环境
要部署Java开发环境首先就要安装JDK. 一.安装JDK8 1. 下载 jdk-8u172-linux-x64.tar.gz 到 /usr/java8/ 目录下: 2. tar -zxvf jd ...
- java 统计字符串中连续重复的字符,并得出新字符串
题目: 比如输入为aaabbc,输出a3b2c1 完整解答: public class Other { static String func(String str) { StringBuffer re ...
- 2019-2020-1 20199319《Linux内核原理与分析》第三周作业
操作系统是如何工作的 基础知识 1.计算机的三个法宝:存储程序计算机.函数调用堆栈机制.中断. 2.堆栈的具体作用:记录函数调用框架.传输函数参数.保存返回值的地址.提供函数内部局部变量的存储空间. ...
- Linux 防火墙之TCP Wrappers
1.TCPWrappers 原理 Telnet.SSH.FTP.POP和SMTP等很多网络服务都会用到TCPWrapper,它被设计为一个介于外来服务请求和系统服务回应的中间处理软件. ...
- CentOS 7安装MySQL 8——萌新超详细教程
1.配置MySQL 8.0的安装源: sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-1.n ...