Description
素数对ACM里的数论来说永远是一个最美丽的话题,现在又到了素数时间了。现在给你一个整数m(4 <=m<= 10^18),那么能不能找出m的一个素因子p是比n(2 <= n <= 10^6)小的呢?
Input
多组数据,每行两个数字m和n,以0 0结束
Output
如果存在,输出BAD p(这个素因子),如果存在多个输出最小的;如果不存在,就输出GOOD吧。(如样例所示)
Sample Input
143 10
143 20
667 20
667 30
2573 30
2573 40
0 0
Sample Output
GOOD
BAD 11
GOOD
BAD 23
GOOD
BAD 31
解题思路:
主要就是求解1000000内的素数,但是一直WA,后来才发现是没注意到p<n,而不是p<=n.哎!
#include<iostream>
#include<cmath>
using namespace std;
const int D = 1000000;
int primes[D/3];
bool isPrimes[D+1];
int primeN;
void init()
{
for(int i=0;i<=D;++i)
isPrimes[i] = true;
primeN = 0;
for(int i=2;i<=D;++i)
{
if(isPrimes[i]){
for(int j=2*i;j<=D;j+=i)
{
isPrimes[j] = false;
}
primes[primeN++] = i;
}
}
}
int main()
{
long long m,n;
init();
while(cin>>m>>n)
{
if((m|n)==0)
break;
int i;
for(i=0;i<primeN&&primes[i]<n;++i)
{
if(m%primes[i]==0)
{
cout<<"BAD "<<primes[i]<<endl;
break;
}
}
if(primes[i]>=n||i==primeN)
cout<<"GOOD"<<endl;
}
return 0;
}
最后欢迎大家访问我的个人网站: 1024s