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(); 
    }
}

转载于:https://www.cnblogs.com/01world/p/5762820.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值