Mar
11
SGU 113 解题手记
2007 解题报告 Popularity: 1%
类似于分解质因数,但不必全分解出来,分解出一个质因数后,判断剩下的是不是个质数就行了。
Submit 1: PE on 2。有个标志两没有改,其是不是PE,是WA。
Submit 2: WA on 9。10^9=1000000000,1后面有9个0,不是1亿,而是1 billion,10亿,它的算术平方根约等于31623。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | #include <iostream> using namespace std; void getprimes(long *primes) { for (long i=2;i<31623;++i) { bool prime(true); for (long j=1,*jprimes=primes+1;j<=*primes;++j,++jprimes) if ((*jprimes)*(*jprimes)>i) break; else if (i%(*jprimes)==0) { prime=false; break; } if (prime) { ++(*primes); *(primes+(*primes))=i; } } } bool isprime(long *primes,long tprime) { bool prime(true); for (long j=1,*jprimes=primes+1;j<=*primes;++j,++jprimes) if ((*jprimes)*(*jprimes)>tprime) break; else if (tprime%(*jprimes)==0) { prime=false; break; } return prime; } int main() { long primes[3001]={0}; long n,p; getprimes(primes); cin>>n; for (long i=1;i<=n;++i) { cin>>p; bool nprime=p>3; if (nprime) { nprime=false; for (long j=1;j<=primes[0];++j) { if (primes[j]*primes[j]>p) break; else if (p%primes[j]==0 && isprime(primes,p/primes[j])) { nprime=true; cout<<"Yes"; break; } } } if (!nprime) cout<<"No"; cout<<endl; } return 0; } |
- http://www.briefdream.com/sgu-113/
- Tags:SGU, 分解质因数, 质数
- (0)comments | leave a reply
- Trackback URI