LightOJ1220 Mysterious Bacteria(思维+唯一分解)
来源:互联网 发布:松下机器人示教编程 编辑:程序博客网 时间:2024/06/15 17:48
题目大意:
给你一个整数n(可能为负数),让你求满足a^p=n的最大的p
思路:
当n是正数时,直接对n进行素因子分解,在对它的素因子的个数进行gcd,比如12=2^2*3,gcd(2,1)就是最大的p;
当n是负数时,则p的值一定是奇数,因为一个数的偶数次方一定为整数,因此需要将它的素因子个数全都化为奇数。
这题主要在于n为负数时的思考!
#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<climits>#include<cmath>using namespace std;typedef long long ll;const int maxn = 1000100;bool vis[maxn], flag;ll prim[maxn/10], n;int m;void initPrime(){ m = 0; for(ll i = 2; i < maxn; i++) { if(!vis[i]) prim[m++] = i; for(ll j = i*i; j < maxn; j += i) vis[j] = true; }}int solve(ll x){ int ans = 0; for(int i = 0; i < m && prim[i]*prim[i] <= x; i++) { int res = 0; while(x % prim[i] == 0&&x) {x /= prim[i], res++;} if(flag) while(res%2==0&&res) res /= 2; if(res && !ans) ans = res; else if(res) ans = __gcd(ans, res); } if(x > 1) ans = 1; return ans;}int main(){ int T; initPrime(); scanf("%d", &T); for(int kase = 1; kase <= T; kase++) { scanf("%lld", &n); flag = false; if(n < 0) n = -n, flag = true; printf("Case %d: %d\n", kase, solve(n)); } return 0;}
0 0
- LightOJ1220 Mysterious Bacteria(思维+唯一分解)
- LightOJ1220 Mysterious Bacteria
- Mysterious Bacteria 素因子分解(唯一分解定理)
- LightOJ 1220 - Mysterious Bacteria(唯一分解定理)
- LightOJ 1220 Mysterious Bacteria(唯一分解定理+暴力)
- Mysterious Bacteria (素数筛法+唯一分解定理+gcd | |暴力)
- Mysterious Bacteria
- Mysterious Bacteria
- [整数分解+dfs] light oj 1220 Mysterious Bacteria
- LightOJ 1220 - Mysterious Bacteria (质因子分解)
- lightOJ 1220 Mysterious Bacteria
- LightOj Mysterious Bacteria
- LightOJ 1220 Mysterious Bacteria
- (LightOJ 1220)Mysterious Bacteria
- LightOJ 1220 Mysterious Bacteria
- LightOJ 1220 Mysterious Bacteria
- LightOJ 1220 Mysterious Bacteria
- lightOJ 1220 Mysterious Bacteria
- linux使用su切换用户提示:Authentication failure的解决方法
- STM 32之智能温控器
- 创建本地仓库
- 解决跨域 ajax 请求 服务器端 session 不能保存问题
- SVM中的核函数
- LightOJ1220 Mysterious Bacteria(思维+唯一分解)
- Kettle连接Hive2的问题解决思路
- SSM框架整合(一)
- POJ 1321 棋盘问题(简单dfs)
- 摄像机内参
- 集合初识
- 把排序数组转化为高度最小的搜索二叉树
- 添加网页图标
- struts2教程(9)--OGNL表达式使用