LightOJ 1220 Mysterious Bacteria(唯一分解定理 + 素数筛选)
http://lightoj.com/volume_showproblem.php?problem=1220
Time Limit:500MS Memory Limit:32768KB 64bit IO Format:%lld & %llu
Description
Dr. Mob has just discovered a Deathly Bacteria. He named it RC-01. RC-01 has a very strange reproduction system. RC-01 lives exactly x days. Now RC-01 produces exactly p new deadly Bacteria where x = bp (where b, p are integers). More generally, x is a perfect pth power. Given the lifetime x of a mother RC-01 you are to determine the maximum number of new RC-01 which can be produced by the mother RC-01.
Input
Input starts with an integer T (≤ 50), denoting the number of test cases.
Each case starts with a line containing an integer x. You can assume that x will have magnitude at least 2 and be within the range of a 32 bit signed integer.
Output
For each case, print the case number and the largest integer p such that x is a perfect pth power.
Sample Input
3
17
1073741824
25
Sample Output
Case 1: 1
Case 2: 30
Case 3: 2
题目大意:
给你一个数x = b^p,求p的最大值
x = p1^x1*p2^x2*p3^x3*...*ps^xs
开始我以为是找x1、x2、... 、xs中的最大值,后来发现想错了,x = b^p, x只有一个因子的p次幂构成
如果x = 12 = 2^2*3^1,要让x = b^p,及12应该是12 = 12^1
所以p = gcd(x1, x2, x3, ... , xs);
比如:24 = 2^3*3^1,p应该是gcd(3, 1) = 1,即24 = 24^1
324 = 3^4*2^2,p应该是gcd(4, 2) = 2,即324 = 18^2
本题有一个坑,就是x可能为负数,如果x为负数的话,x = b^q, q必须使奇数,所以将x转化为正数求得的解如果是偶数的话必须将其一直除2转化为奇数
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm> using namespace std; const int N = 1e5 +;
const int INF = 0x3f3f3f3f;
typedef long long ll; int prime[N], k;
bool Isprime[N]; void Prime()
{
k = ;
memset(Isprime, true, sizeof(Isprime));
prime[] = false;
for(int i = ; i < N ; i++)
{
if(Isprime[i])
{
prime[k++] = i;
for(int j = i ; 1LL * i * j < N ; j++)
Isprime[i * j] = false;
}
}
} int gcd(int a, int b)
{
return a % b == ? b : gcd(b, a % b);
} int main()
{
int t, p = ;
ll n;//n要用long long 定义,如果n是负数的话会超时
Prime();
scanf("%d", &t);
while(t--)
{
p++;
scanf("%lld", &n);
int f = ; if(n < )
{
n = - n;//int定义n这儿会卡住半天出不来,就会超时,为什么这样我也不知道
f = ;
}
int x, ans = ;
for(int i = ; i < k && prime[i] * prime[i] <= n ; i++)
{
if(n % prime[i] == )
{
x = ;
while(n % prime[i] == )
{
x++;
n /= prime[i];
}
if(ans == )
ans = x;
else
ans = gcd(ans, x);
}
}
if(n > )
ans = gcd(ans, );
if(f == )
{
if(ans % == )
ans = ;
}
printf("Case %d: %d\n", p, ans);
}
return ;
}
/*
8
2147483647
-2147483648
32
-32
64
-64
4
-4 Output: Case 1: 1
Case 2: 31
Case 3: 5
Case 4: 5
Case 5: 6
Case 6: 3
Case 7: 2
Case 8: 1
*/
LightOJ 1220 Mysterious Bacteria(唯一分解定理 + 素数筛选)的更多相关文章
- LightOJ 1341 - Aladdin and the Flying Carpet (唯一分解定理 + 素数筛选)
http://lightoj.com/volume_showproblem.php?problem=1341 Aladdin and the Flying Carpet Time Limit:3000 ...
- LightOJ 1236 Pairs Forming LCM (LCM 唯一分解定理 + 素数筛选)
http://lightoj.com/volume_showproblem.php?problem=1236 Pairs Forming LCM Time Limit:2000MS Memor ...
- 1341 - Aladdin and the Flying Carpet ---light oj (唯一分解定理+素数筛选)
http://lightoj.com/volume_showproblem.php?problem=1341 题目大意: 给你矩形的面积(矩形的边长都是正整数),让你求最小的边大于等于b的矩形的个数. ...
- LightOJ-1220 Mysterious Bacteria 唯一分解定理 带条件的最大公因数
题目链接:https://cn.vjudge.net/problem/LightOJ-1220 题意 给x=y^p,问p最大多少 注意x可能负数 思路 唯一分解定理,求各素因数指数的GCD 注意负数的 ...
- LightOj 1220 - Mysterious Bacteria (分解质因子x=b^p 中的 x 求最大的 p)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1220 题意:已知 x=bp 中的 x 求最大的 p,其中 x b p 都为整数 x = ...
- LightOj 1220 Mysterious Bacteria
题目大意: 给出一个x,求满足x = b^p,p最大是多少? 解题思路: x可以表示为:x = p1^e1 * p2^e2 * p3^e3 ....... * pn^en. p = gcd (e1,e ...
- LightOJ 1220 Mysterious Bacteria 水题
暴力就行了,找出素因子,正的最多是30,然后负的最多是31(这一点wa了一次) #include <cstdio> #include <iostream> #include & ...
- LightOj 1197 Help Hanzo (区间素数筛选)
题目大意: 给出T个实例,T<=200,给出[a,b]区间,问这个区间里面有多少个素数?(1 ≤ a ≤ b < 231, b - a ≤ 100000) 解题思路: 由于a,b的取值范围 ...
- LightOJ 1197 Help Hanzo(区间素数筛选)
E - Help Hanzo Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu Submit ...
随机推荐
- 公司培训lesson 1-代码质量
课堂讲义 代码质量五大原则 编码规范 命名规范.学会合理科学的命名类名.方法名.变量名.命名宗旨:简洁明了,见名只意:了解常用单词缩写 注释.是否写根据所处工作环境的需要而决定.将以源代码写成以“注释 ...
- Excel2013复制内容粘贴到刷选的数据表中
如何将复制内容粘贴到筛选后表格中: 1.需要一个表格:我要把这个表格里姓名列不包含A的项改为另外一个表中的数据列: 2.在姓名右侧插入两列,列A.列B: 3.在列A下第一格输入1,向下序列填充: 4. ...
- 控制 TextBox 的滚动条
利用 EM_LINESCROLL 信息控制 TextBox 的卷动. 在含有卷动轴的 TextBox 中, 如何以程序控制 TextBox 的卷动? 传送 EM_LINESCROLL 信息给 Text ...
- JPA with Hibernate implementation
https://code.google.com/p/jpa-basics-tutorial/source/checkout http://alextretyakov.blogspot.com/2013 ...
- 最简单的WebService
写在前面的话: 当两个人碰面后,产生了好感,如果需要得到双方的信息,那么双方的交流是必不可少的!应用程序也如此, 各个应用程序之间的交流就需要WebService来作为相互交流的桥梁! 项目目的: 程 ...
- 二硫化铼(ReS2)的电子输运特性及逻辑器件研究进展
南京大学物理学院.固体微结构物理国家重点实验室.微结构科学与技术协同创新中心的缪峰教授课题组和王伯根教授课题组在新型二维材料二硫化铼(ReS2)的电子输运特性及逻辑器件研究领域取得重要进展,相关论文于 ...
- centos7虚拟机安装elasticsearch6.4.x-遇到的坑
OS:Centos7x虚拟机 1H2Gjdk:1.8elasticsearch:5.6.0 1.下载“elasticsearch-5.6.0.tar.gz”解压到/usr/local/elastics ...
- mybatis sql语句等日志打印
加settings <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE configuration ...
- python简单爬虫(一)
学习python前纠结了下,到底是应该一个个知识点吃透,然后写些小程序.还是应该快速掌握基础语法,快速实践.思考后认为前者这么学习速度真心不高,于是花2天时间看了下python3的语法,虽然很多都不明 ...
- 链接ftp,把文件或图片上传到ftp指定的文件夹中
/******************************************************************** * * * Filename : .java * Auth ...