HDU 2303 - The Embarrassed Cryptographer (Java高精度)

题意

找出一个大数里有没有k以内的因子。

思路

Java水过

代码

import java.io.*;
import java.math.*;
import java.util.*;
 
public class Main {
    static int MAXN = (int)(1e6 + 10);
     
    static List<Integer> prime = new ArrayList<Integer>();
     
    static void GetPrimeTable() {
        int vis[] = new int[MAXN];
         
        int m = (int)Math.sqrt(MAXN + 0.5);
        for (int i = 2; i <= m; i++) if (vis[i] == 0) {
            for (int j = i*i; j < MAXN; j += i) {
                vis[j] = 1;
            }
        }
        for (int i = 2; i < MAXN; i++) {
            if (vis[i] == 0) {
                prime.add(i);
            }
        }
    }
         
    public static void main(String args[]) {
        GetPrimeTable();
        Scanner in = new Scanner(new BufferedInputStream(System.in));
        while (in.hasNextBigInteger()) {
            BigInteger a = in.nextBigInteger(), b = in.nextBigInteger();
            if (a.intValue() == 0 && b.intValue() == 0) break;
            int res = 0;
            for (int i = 0; prime.get(i) < b.intValue(); i++) {
                if (a.mod(new BigInteger(prime.get(i).toString())).intValue() == 0) {
                    res = prime.get(i);
                    break;
                }
            }
            if (res == 0) {
                System.out.println("GOOD");
            }
            else {
                System.out.println("BAD " + res);  
            }
        }
    }
}

Powered by Jekyll and Theme by solid