题目链接:

最小的指数

乍一看还以为是Pollard_rho算法,其实大可不必。

发现\(1<= n <= 1e18\),我们可以将n分为两部分(分块思想降低时间复杂度)。

剔除小于等于\(4000\)的所有质因子,剩余的设为x,设此时得到的答案为\(minnum\)

如果x为\(1\),那我们得到答案,可以直接返回

否则知道x的质因子一定大于\(4000\),可以分类讨论

若x可写成\(x=p^{(1/4)}\),\(minnum = min(minnum,4)\),返回

若x可写成\(x=p^{(1/3)}\),\(minnum = min(minnum,3)\),返回

否则x若可写成平方的形式,\(minnum = min(minnum,2)\),注意要区分为4的情况

否则我们知道\(minnum\)一定为\(1\)

时间复杂度大约为\(O(t) * 1000\)

(将大问题化为小问题然后分类讨论)

代码:

#include <bits/stdc++.h>
#define LL long long
using namespace std;
const int N = 10001;
int prime[N], flag[N], tot, t;
LL n;
LL mulfou(LL x) { return x*x*x*x; }
LL multhe(LL x) { return x*x*x; } void get_prime(int n)
{
for(int i = 2;i <= n; i++)
{
if(!flag[i]) prime[++ tot] = i;
for(int j = 1;j <= tot && i * prime[j] <= n; j++)
{
flag[i * prime[j]] = 1;
if(i % prime[j] == 0) break;
}
}
} void work(LL n)
{
if(n == 1) { printf("0\n");return; }
int minnum = 100; LL x = n;
for(int i = 1;i <= tot; i++)
{
if(x % (LL) prime[i] != 0) continue;
int res = 0;
while(x % prime[i] == 0) ++ res,x /= prime[i];
minnum = min(minnum,res);
}
if(x == 1) {printf("%d\n",minnum);return;}
if(minnum == 1) {printf("1\n");return;}
LL sqr = pow(x,1.0/4.0), sqr2 = pow(x,1.0/2.0);
if(mulfou(sqr) == x || mulfou(sqr + 1) == x || mulfou(sqr - 1) == x)
{ minnum = min(minnum,4);printf("%d\n",minnum); return; }
else if(sqr2 * sqr2 == x) { minnum = min(minnum,2);printf("%d\n",minnum);return; }
else
{
LL sqr3 = (LL)pow(1.0*x,1.0/3.0);
if(multhe(sqr3) == x || multhe(sqr3 + 1) == x || multhe(sqr3 - 1) == x)
{ minnum = min(3,minnum);printf("%d\n",minnum); return; }
else { printf("1\n"); return; }
} } int main()
{
get_prime(4000);
scanf("%d",&t);
while(t --)
{
scanf("%lld",&n);
work(n);
}
}
/*
1
512384096008
*/

牛客挑战赛46 B的更多相关文章

  1. 牛客挑战赛46 D

    题目链接: 数列 查询有多少\([l,r]\)区间满足每个数出现\(k\)的倍数次 即为\(1\)到\(r\)与\(1\)到\(l-1\)每个数相减的次数为\(k\)的倍数次 可以使用哈希维护 记录每 ...

  2. 牛客挑战赛46 C

    题目链接: 排列 考虑\(dp\),我们思考如何设计状态 将第i个数插入i-1个数中,我们考虑会新增多少个超级逆序对 假设将\(i\)插入后\(i\)的位置为\(l\),\(i-1\)的原来的位置为\ ...

  3. 牛客练习赛46 C 华华跟奕奕玩游戏 (期望,概率)(详解)

    链接:https://ac.nowcoder.com/acm/contest/894/C 来源:牛客网 华华跟奕奕玩游戏 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K ...

  4. 牛客练习赛46 B 华华送奕奕小礼物 (预处理前缀和,二分)

    链接:https://ac.nowcoder.com/acm/contest/894/B?&headNav=acm 来源:牛客网 华华送奕奕小礼物 时间限制:C/C++ 1秒,其他语言2秒 空 ...

  5. 牛客练习赛46 A 华华教奕奕写几何 (简单数学)

    链接:https://ac.nowcoder.com/acm/contest/894/A 来源:牛客网 华华教奕奕写几何 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K ...

  6. 牛客挑战赛 39 牛牛与序列 隔板法 容斥 dp

    LINK:牛牛与序列 (牛客div1的E题怎么这么水... 还没D难. 定义一个序列合法 当且仅当存在一个位置i满足 $a_i>a_,a_j<a_$且对于所有的位置i,$1 \leq a_ ...

  7. 牛客挑战赛 30 A 小G数数

    题目链接:https://ac.nowcoder.com/acm/contest/375/A 分析:我写的时候竟然把它当成了DP....... 还建了个结构体DP数组,保存一二位,不知道当时脑子在抽啥 ...

  8. 良心送分题(牛客挑战赛35E+虚树+最短路)

    目录 题目链接 题意 思路 代码 题目链接 传送门 题意 给你一棵树,然后把这棵树复制\(k\)次,然后再添加\(m\)条边,然后给你起点和终点,问你起点到终点的最短路. 思路 由于将树复制\(k\) ...

  9. Luogu5611 Ynoi2013 D2T2/牛客挑战赛32F 最大子段和 分块、分治

    传送门 之前一直咕着的,因为一些特殊的原因把这道题更掉算了-- 有一个对值域莫队+线段树的做法,复杂度\(O(n\sqrt{n} \log n)\)然而牛客机子实在太慢了没有希望(Luogu上精细实现 ...

随机推荐

  1. phpstudy搭建网站只能访问首页,其他路由访问404

    今天博主遇到了一个很奇葩的问题,电脑下载了一个phpstudy搭建网站,框架用的是tp,但是除了输入域名能访问,其他页面都访问不了 经过博主的疯狂问大佬,以及百度,终于解决了这个问题 这次出现问题的原 ...

  2. Spark SQL | 目前Spark社区最活跃的组件之一

    Spark SQL是一个用来处理结构化数据的Spark组件,前身是shark,但是shark过多的依赖于hive如采用hive的语法解析器.查询优化器等,制约了Spark各个组件之间的相互集成,因此S ...

  3. img元素的联用

    img元素的常用属性: src属性:资源地址 alt属性:当图片资源失效时,将出现该属性的设置的文字 最简单的联动: 和a元素联用(直接用a标签套) <a href="https:// ...

  4. Java中的第三大特性-多态性

    一.多态性的概念 多态性是以继承为基础上的,举个例子,人属于动物,狗也属于动物,所以动物就是父类,而人和狗都是动物的子类,都属于动物. 二.多态的使用 (1)多态一般用于方法参数或者方法返回值,特别当 ...

  5. java NIO 随笔

    一,NIO入门    NIO 是new io的缩写,说实话,nio api比较难用,所用大家需要采用网络通信的时候,普通首先想到的是netty,不直接使用NIO,但是你不了解NIO,说实话,你也理解不 ...

  6. python3 Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝,无法连接

    报错源代码from selenium import webdriverimport unittestimport timefrom HTMLTestRunner import HTMLTestRunn ...

  7. Java基础教程——字节流

    IO流 水流 特点 连续性 逝者如斯夫,不舍昼夜: 方向性 一江春水向东流.水往低处流.百川东到海,何时复西归?少壮不努力,老大徒伤悲! 源头尽头 唯有源头活水来:覆水难收 Java里的IO也有这样的 ...

  8. 编程小白必备——主流语言C语言知识点

    对于编程语言来说,经常看到有因为各自支持的语言阵营而互怼的,其实根本没那个必要,都只是一种工具而已.当多数主流语言都会使用时也许你就不会有偏见了,本质不过都是用来描述计算机的一个任务,只是每门语言设计 ...

  9. 【线程池】core与非core

    core和非core的区别: 当线程数小于core size时我们取task是这么取得: 小于时用poll并设置超时时间,否则用take阻塞等待 第二条件就出去了 没有拿到task的worker线程会 ...

  10. Docker 入门介绍

    Docker是什么 从发布到现在 docker一直很受关注,在一定程度是改变了软件行业 如果你还不知道 docker 是什么是不是有点out了,接下来我们来介绍docker是什么,解决了什么问题,好处 ...