poj 2635 The Embarrassed Cryptographer ??/Java??(???)
题意:
数K( 4 <= K <= 10^100 )是两个素数的积,L( 2 <= L <= 10^6)是两个素数中最小素数的下限,如果两个素数都不小于L,输出GOOD,否则输出其中最小的素数。
分析:
简单题,枚举L以内的素数,判断是否是K的因子即可。K很大,可以同余取模。不过还是用Java水之更简单。
import java.io.BufferedInputStream;
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
Scanner cin=new Scanner(new BufferedInputStream(System.in));
static int N=1000009;
boolean np[]=new boolean[N];
int len;
int p[]=new int[N];
int cnt=0;
public void getPrime(){
for(int i=2;i<N;i++){
if(np[i]==false)p[cnt++]=i;
for(int j=0;j<cnt;j++){
if(i*p[j]>=N)break;
np[i*p[j]]=true;
if(i%p[j]==0)break;
}
}
}
public Main(){
getPrime();
while(cin.hasNext()){
BigInteger b=cin.nextBigInteger();
int L=cin.nextInt();
if(b.equals(BigInteger.ZERO)&&L==0)break;
boolean flag=true;
int ans = 0;
for(int i=0;p[i]<L;i++){
if(b.mod(BigInteger.valueOf(p[i])).equals(BigInteger.ZERO)){flag=false;ans=p[i];break;}
}
if(flag)System.out.println("GOOD");
else System.out.printf("BAD %d\n",ans);
}
}
public static void main(String[] args){
new Main();
}
}