题目大意:
输入一个数,判断是否是任意一个素数的几次方~
但是,我开始做的时候,先找了一遍素数,发现到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;
}
本文介绍了一种判断整数是否为某素数的幂的方法。通过预计算一定范围内的素数,并检查输入数值是否能被这些素数的幂次方整除来实现。算法讨论了数据规模对效率的影响及优化技巧。
356

被折叠的 条评论
为什么被折叠?



