超级素数幂

来源:互联网 发布:美国政治正确 知乎 编辑:程序博客网 时间:2024/05/16 11:37

如果一个数字能表示为p^q(^表示幂运算)且p为一个素数,q为大于1的正整数就称这个数叫做超级素数幂。现在给出一个正整数n,如果n是一个超级素数幂需要找出对应的p,q。

输入描述:
输入一个正整数n(2 ≤ n ≤ 10^18)

输出描述:
如果n是一个超级素数幂则输出p,q,以空格分隔,行末无空格。
如果n不是超级素数幂,则输出No

输入例子:
27

输出例子:
3 3


枚举q,对每个q,求n的p,然后判断p是否为素数,注意千万别素数打表,因为p的范围在2-10^9之间,另外发现devc++编译器实在是不行,27这个数据居然不能正确输出,还是codeblocks好用

#include"iostream"#include"math.h"#include"string.h"using namespace std;typedef unsigned long long ll;bool su(ll x){    for(int i=2;i<=sqrt(x);i++)        if(x%i==0)            return false;    return true;}int main(){    ll n;    bool sign=false;    cin>>n;    int end=log2(n);    for(int i=2;i<=end;i++)    {        double res=pow(n,1.0/i);        int jie=int(res+1e-9);        //cout<<res<<" "<<jie<<endl;        if(jie==res&&su(jie))        {            sign=true;            cout<<jie<<" "<<i<<endl;            break;        }    }    if(!sign)        cout<<"No"<<endl;    return 0;}
0 0