如果一个数字能表示为p^q(^表示幂运算)且p为一个素数,q为大于1的正整数就称这个数叫做超级素数幂。
现在给出一个正整数n,如果n是一个超级素数幂需要找出对应的p,q。
#include <iostream>
#include <cmath>
using namespace std;
/*素数判定函数*/
bool isPrime( int n ){
if( n <= 1 ){
return false;
}
for( int i = 2; i <= sqrt(n); ++i ){
if( n%i == 0 ){
return false;
}
}
return true;
}
int main()
{
long long int n;
while( cin>>n ){
int max_q = log2(n);
bool flag = false;
for( int q = 2; q <= max_q; ++q ){
double p = pow( n, 1.0/q );
if( p-int(p)==0 && isPrime( int(p) ) ){
cout<<int(p)<<" "<<q<<endl;
flag = true;
break;
}
}
if( !flag ){//未找到满足条件的p,q
cout<<"No"<<endl;
}
}
return 0;
}