题目如下
给出一个数N,问N是否能表示成某个正整数X的K次幂(K>1),N可能有多种表示方法,请找出最大的X并输出相应的K
一点小问题:提交了三遍原来是编译器的问题,无pow(int&, int)的重载,故出现call of overloaded `pow(int&, int)’ ,只能最多指数是整型,解决方法,对底数(地鼠)使用强制转换成double
#include <iostream>
#include <string>
#include<cmath>
using namespace std;
int main()
{
int a, b;
while (cin >> a&&a != 0)
{
b = a/2; //不能用sqrt提升所谓的性能,因为要截断,
//如8开根号2点多
if (pow((double)b, 2) == a)
{
cout << b << " " << 2 << endl;
}
else
{
b = b - 1;
while (b>1)
{
int i = 0;
for (; pow((double)b, (double)i)<a; i++); //有些编译器严格要求pow用double类型的,16.7.1
if (pow((double)b, (double)i) == a)
{
cout << b << " " << i << endl;
break;
}
b--;
}
if (b == 1)
{
cout << 0 << " " << 0 << endl;
}
}
}
return 0;
}