题目大意:给你一个数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分解成质因子的形式,问最小的幂是多少)的更多相关文章

  1. 【C/C++】任意大于1的整数分解成素数因子乘积的形式

    // #include<stdio.h> #include<math.h> #include<malloc.h> int isprime(long n); void ...

  2. cf822D(质因子)

    题目链接: http://codeforces.com/problemset/problem/822/D 题意: 输入 t, l, r 求 t0·f(l) + t1·f(l + 1) + ... +  ...

  3. POJ2992:Divisors(求N!因子的个数,乘性函数,分解n!的质因子(算是找规律))

    题目链接:http://poj.org/problem?id=2992 题目要求:Your task in this problem is to determine the number of div ...

  4. 整数(质因子)分解(Pollard rho大整数分解)

    整数分解,又称质因子分解.在数学中,整数分解问题是指:给出一个正整数,将其写成几个素数的乘积的形式. (每个合数都可以写成几个质数相乘的形式,这几个质数就都叫做这个合数的质因数.) .试除法(适用于范 ...

  5. hdu6237 分解质因子

    题意:给一堆石子,每次移动一颗到另一堆,要求最小次数使得,所有石子数gcd>1 题解:枚举所有质因子,然后找次数最小的那一个,统计次数时,我们可以事先记录下每堆石子余质因子 的和,对所有石子取余 ...

  6. 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 ...

  7. 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 ...

  8. 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,求满 ...

  9. HDU 4135 Co-prime (容斥+分解质因子)

    <题目链接> 题目大意: 给定区间[A,B](1 <= A <= B <= 10 15)和N(1 <=N <= 10 9),求出该区间中与N互质的数的个数. ...

随机推荐

  1. ElasticSearch基础知识讲解

    第一节 ElasticSearch概述 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTfull web接口.ElasticSea ...

  2. Jpa 重写方言dialect 使用oracle / mysql 数据库自定义函数

    在使用criteria api进行查询时 criteriaBuilder只提供了一个部分标准的sql函数,但当我们需要使用oracle特有的行转列函数wm_concat或 mysql特有的行转列函数g ...

  3. spring boot 是如何利用jackson进行反序列化的?

    以下面的代码为例: @RestController public class HelloController { @RequestMapping("/") public BillS ...

  4. 【网络安全】window 快速搭建 ftp 及 多种访问方式

    在局域网里面使用ftp传输文件比使用qq等软件传输速度快很多,但是搭建ftp很多时候需要下载相应的支持软件,其实不必下载相关的软件,因为window自带ftp功能. 演示操作系统:windows10 ...

  5. java 使用面向对象方式实现录入学生信息,取出成绩最大值、最小值、平均值、对其进行排序

    题目: java 使用面向对象方式实现录入学生信息,取出成绩最大值.最小值.平均值.对其进行排序 gitup源码下载地址: https://github.com/benxiaohai8888/Java ...

  6. php-fpm内存泄漏问题排查

    生产环境内存泄漏问题排查,以下是排查思路   生产环境上有严重的内存溢出问题(红色框所示,正常值应为是 20M 左右)同时系统有 Core Dump 文件产生排查过程中还发现一个现象,如果关闭 OPc ...

  7. ECharts 中的事件和行为

    在 ECharts 的图表中用户的操作将会触发相应的事件.开发者可以监听这些事件,然后通过回调函数做相应的处理,比如跳转到一个地址,或者弹出对话框,或者做数据下钻等等. 如下是一个绑定点击操作的示例. ...

  8. python 实现屏幕录制

    用python实现屏幕录制 PIL 即pollow 的安装命令如下: pip install pillow 其中cv2的安装是下面这条命令 pip install opencv-python 代码实现 ...

  9. SpringBoot02——A Simple SpringBoot Project&Hot Deployment

    1.简单的Controller映射 1.新建一个controller包,包一定在启动器的下一层级 2.可以在application.properties中进行调整端口和context-path参数 s ...

  10. id 显示用户与用户组的信息

    id 显示用户与用户组的信息 1.命令功能 id显示指定用户的用户ID和组ID等信息. 2.语法格式 id  option  username 参数说明 选项 选项说明 -gx 显示用户组ID -G ...