回复 18楼 xzlxzlxzl
其实求10^9开平方范围内的数就可以了~因为一个数如果包含了至少一个重复的质因子,那么它肯定可以被某个质数的平方整除~
[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
#include<stdio.h> #define MAX 40001 char isPrime[MAX+1]; int prim[MAX+1]; int primSqre[MAX+1]; int main( void ) { int i=0; int j=0; int num=0; int data[2]; scanf("%d",&data[0]);//输入一个数作为检查数据 for (i=2;i<=MAX;++i) { if (!isPrime[i]) prim[num++]=i; for (j=0;j<num&&i*prim[j]<=MAX;++j) { isPrime[i*prim[j]]=1; if (i%prim[j]==0) break; } } for (i=0;i<num;++i) primSqre[i]=prim[i]*prim[i]; for (data[1]=data[0];;) { for (j=0;j<2;++j) { for (i=0;i!=num&&(data[j]%primSqre[i])&&primSqre[i]<=data[j];++i); if (i!=num&&primSqre[i]>data[j]) { printf("%d\n",data[j]); j=3; break; } } if (j==3) break; if (data[0]>2) --data[0]; ++data[1]; } return 0; }