您的位置:首页 > 其它

cug1181

2015-07-16 23:42 253 查看
题目大意:题意:求使得x = b^p的最大的p

•思路一:数据范围是32位,直接从31开始倒叙枚举所有的p,满足题意则输出即可。至于如何判断x
= b^p,可以先对x开p次方取整后得到一个数,在对该数取n次方,判断是否等于x,若相等即满足。(注意x可能为负数,此时p只能是奇数)

•思路二:对x进行素数分解,则所有素因子的指数的最大公约数即为所求。给出的x可以是负数……负数的情况要先把x变成-x去计算,显然只有奇数次乘方才有可能是负数(我们不考虑复数……),所以如果最后结果是偶数,要不断将结果减半,直到为奇数。

#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
using namespace std;

int main()
{
int n;
while(cin >> n && n)
{
if(n > 0)
{
for(int i = 31 ; i  >=  1 ; i -- )
{
int a = (pow(n * 1.0, 1.0/ (i*1.0)) + 0.5) ;
int b = (pow(a * 1.0, (i*1.0)) + 0.5);
if(b == n)
{
cout << i << endl;
break;
}
}
}
else
{
n = -n;
for(int i = 31 ; i  >=  1 ; i -= 2 )
{
int a = (pow(n * 1.0, 1.0/ (i*1.0)) + 0.5) ;
int b = (pow(a * 1.0, (i*1.0)) + 0.5);
if(b == n)
{
cout << i << endl;
break;
}
}
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: