hdu3826 素数筛选
2012-08-20 23:43
183 查看
解题思路:保存10^6前的素数再逐个判断
没把“lld”改为“I64d” wa 了一个下午。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
没把“lld”改为“I64d” wa 了一个下午。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
//============================================================================ // Name : hdu3826__.cpp // Author : ssslpk // Version : // Copyright : Your copyright notice // Description : Hello World in C++, Ansi-style //============================================================================ #include <iostream> #include<cstdio> #include<cmath> #include<cstring> #define int64 long long #define N 1000001 using namespace std; int g ={0}; int plen,pri ={0}; void Prime() { int i,j; plen=0; for(i=2;i<N;i++) { if(!g[i]) { pri[plen++]=i; for(j=2;i*j<N;++j) g[i*j]=1; } } } bool check(int64 n) { for(int i=0;i<plen &&pri[i]<n;i++) { if(n%pri[i]==0) { n=n/pri[i]; if(n%pri[i]==0)return false; } } return true; } int main() { Prime(); int cas; scanf("%d",&cas); for(int k=1;k<=cas;k++) { int64 n; scanf("%I64d",&n); printf("Case %d: ",k); if(check(n)) { int64 tmp=(int64)sqrt(n*1.0); if(tmp*tmp == n)printf("No\n"); else printf("Yes\n"); } else printf("No\n"); } return 0; }