传送门:戳我
题目大意:给了一个pth power 的定义,求一个数的Perfect pth power
思路:首先我们可以想到从2开始枚举,第一个找到的n是i的整次幂的就是答案,又考虑到合数是两个或多个质数的乘积,所以枚举过程中可以无视合数,直接枚举素数
吐槽:题目右边那个画像是要闹哪样……太喜感了吧
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <cstdlib>
using namespace std;
int prime[0x7fff*2+50],n;
int main(){
srand(951123);
memset(prime,0,sizeof(prime));
prime[1]=prime[0]=1;
for (int i=2;i<=0x7fff*2;i++){
if (!prime[i]){
for (int j=i+i;j<=0x7fff*2;j+=i){
prime[j]=1;
}
}
}
while (scanf("%d",&n)!=EOF){
if (n==0) break;
/*
if (prime[n]==0) {
printf("%d\n",1);
continue;
}
*/
int flag=0;
for (int i=2;i<=0x7fff*2;i++){
if (i>=n) break;
if (prime[i]) continue;
int a=n,cnt=0;
while (a%i==0 && a>0){
a=a/i;
cnt++;
}
if (n>0 && a==1){
printf("%d\n",cnt);
flag=1;
break;
}
if (n<0 && a==1 && cnt%2!=0){
printf("%d\n",cnt);
flag=1;
break;
}
}
if (!flag){
printf("%d\n",1);
}
}
return 0;
}