题目大意:
输入一个数,判断是否是任意一个素数的几次方~
但是,我开始做的时候,先找了一遍素数,发现到10^7就输出不了了,应该是数据太大超时,我当时以为这种方法不对,又怀疑是不是自己读错题意了,然后又是李正确答案越来越远!
我不太明白的是,不用把10^9里的素数跑一遍吗???
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int a[12121211];
int top;
bool judge(int aa)//判断是否为素数
{
if(aa<=1)
return false;
for(int i=2;i<=sqrt(aa);i++)
{
if(aa%i==0)
{
return false;
}
}
return true;
}
int main()
{
top = -1;
for(int i=2;i<=2234567;i++)//跑到了10^6,其实我又试了试,跑到100就可以了~
{
if(judge(i))
a[++top] = i;
}
int n;
scanf("%d", &n);
int flag = 0;
for(int i=0;i<=top;i++)
{
long long int sum = 1;
for(int j=1;sum<=n;j++)//判断是否是某个素数的几次方,知道这个数大于输入的数
{
sum = sum * a[i];
if(n==sum)
{
flag = 1;
break;
}
}
if(flag)
break;
}
if(flag)
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
return 0;
}