牛客挑战赛46 B
题目链接:
乍一看还以为是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的更多相关文章
- 牛客挑战赛46 D
题目链接: 数列 查询有多少\([l,r]\)区间满足每个数出现\(k\)的倍数次 即为\(1\)到\(r\)与\(1\)到\(l-1\)每个数相减的次数为\(k\)的倍数次 可以使用哈希维护 记录每 ...
- 牛客挑战赛46 C
题目链接: 排列 考虑\(dp\),我们思考如何设计状态 将第i个数插入i-1个数中,我们考虑会新增多少个超级逆序对 假设将\(i\)插入后\(i\)的位置为\(l\),\(i-1\)的原来的位置为\ ...
- 牛客练习赛46 C 华华跟奕奕玩游戏 (期望,概率)(详解)
链接:https://ac.nowcoder.com/acm/contest/894/C 来源:牛客网 华华跟奕奕玩游戏 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K ...
- 牛客练习赛46 B 华华送奕奕小礼物 (预处理前缀和,二分)
链接:https://ac.nowcoder.com/acm/contest/894/B?&headNav=acm 来源:牛客网 华华送奕奕小礼物 时间限制:C/C++ 1秒,其他语言2秒 空 ...
- 牛客练习赛46 A 华华教奕奕写几何 (简单数学)
链接:https://ac.nowcoder.com/acm/contest/894/A 来源:牛客网 华华教奕奕写几何 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K ...
- 牛客挑战赛 39 牛牛与序列 隔板法 容斥 dp
LINK:牛牛与序列 (牛客div1的E题怎么这么水... 还没D难. 定义一个序列合法 当且仅当存在一个位置i满足 $a_i>a_,a_j<a_$且对于所有的位置i,$1 \leq a_ ...
- 牛客挑战赛 30 A 小G数数
题目链接:https://ac.nowcoder.com/acm/contest/375/A 分析:我写的时候竟然把它当成了DP....... 还建了个结构体DP数组,保存一二位,不知道当时脑子在抽啥 ...
- 良心送分题(牛客挑战赛35E+虚树+最短路)
目录 题目链接 题意 思路 代码 题目链接 传送门 题意 给你一棵树,然后把这棵树复制\(k\)次,然后再添加\(m\)条边,然后给你起点和终点,问你起点到终点的最短路. 思路 由于将树复制\(k\) ...
- Luogu5611 Ynoi2013 D2T2/牛客挑战赛32F 最大子段和 分块、分治
传送门 之前一直咕着的,因为一些特殊的原因把这道题更掉算了-- 有一个对值域莫队+线段树的做法,复杂度\(O(n\sqrt{n} \log n)\)然而牛客机子实在太慢了没有希望(Luogu上精细实现 ...
随机推荐
- Perfview 分析进程性能
PerfView 概述: PerfView是一个可以帮助你分析CPU和内存问题的工具软件.它非常轻量级也不会入侵诊断的程序,在诊断过程中对诊断的程序影响甚微. Visual Studio自带的性能分析 ...
- 面试阿里,腾讯90%会被问到的zookeeper,把这篇文章看完就够了。
Zookeeper概述 zookeeper高容错数据一致性协议(CP)的分布式小文件系统,提供类似于文件系统的目录方式的数据存储. 全局数据一致性:每个server保存一份相同的数据副本,client ...
- 使用Beyond Compare对比大篇幅文件的小技巧
我们在编辑较大篇幅的文章时,无可避免地要经过多次的修改.有时候修改的版本过多时,我们很可能就会记不清最新版的文章对比上一版的文章,究竟修改了哪些地方.但有了Beyond Compare(Windows ...
- Camtasia中对录制视频进行编辑——交互性
随着新媒体的广泛发展,视频处理的需要也逐渐变得越来越大,很多人都不知道市场上的哪款软件是比较符合大众需要的.有的软件功能写的天花乱坠,但是实际操作确很难.并不符合大众的简单需求. 今天我便给大家推荐一 ...
- 【MathType教学】表示分类的大括号怎么打
大括号是一种常见的数学符号,可以用于集合.分段函数中,其实大括号还可以用来总结数学知识,比如对三角形进行分类,此时用的大括号可以称为表示分类的大括号.MathType作为专业的数学公式编辑器,可以快速 ...
- 错误原因:因为desc是mysql里面的关键字
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check ...
- Jmeter生成HTML测试报告
jmeter轻便小巧,运行速度快,但是缺少直观的可视化测试报告,并且生成测试报告操作稍微有点麻烦. GUI界面没有生成测试报告的功能,只能使用命令行生成测试报告.这里需要提到一个jtl的文件,它是生成 ...
- LIS问题$n log_2 n$做法(二分优化)
#include<bits/stdc++.h> using namespace std; const int inf=1e9+5; const int maxn=1e6+5; int n, ...
- JavaSE 学习笔记03丨继承、接口、多态、内部类
Chapter. 5 继承 继承作为面向对象的三大特征之一,它是多态的前提.它主要解决的问题是共性抽取. Java中的继承,是单继承.多级继承的. 已存在的类,被称为超类.基类.父类(parent c ...
- 【mq读书笔记】mq producer启动流程
创建MQClientInstance实例.这里有个实例缓存 clienrId为客户端IP+instance+(unitname)注意到之前把instance替换为进程id,是为了instance为默认 ...