如何使用BigInteger在我的代码中计算素数?

时间:2011-03-10 07:03:36

标签: java primes

我正在使用下面的基本和粗略代码来计算素数,然后将它们导出到文本文件中:

import java.util.Scanner;
import java.io.*;


public class primeGenerator{

    public static void main(String[] args)throws Exception {
        Scanner kb = new Scanner(System.in);
        String prime;
        long num = kb.nextLong();
        long i;
        long z=0;
        while(z==0){

            for (i=2; i < num ;i++ ){
                long n = num%i;
                if (n==0){

                    break;
                }
            }
            if(i == num){
                writer(num);

            }
            num=num+2;
        }
    }

    public static void writer(long num) throws Exception {

           FileWriter writer = new FileWriter("prime.txt",true); 
           String prime= ""+ num;
           writer.write(prime);
           writer.write("   ");
           writer.flush();
           writer.close();


    }
}

我想找到超出Primative long范围的素数,显然大整数是可行的方法。那么我如何改变我的代码呢?

2 个答案:

答案 0 :(得分:3)

你真的需要这个吗?数字大于可由 long 处理的数字意味着您要测试大于9223372036854775807的数字。如果您的for循环可以测试每秒一亿个分区,那么确定是否还需要2923年当然,这个数字是素数 - 对于更大的数字来说更长。

常见的优化是仅测试高达sqrt(num)的分区。如果你还没有找到任何东西,那么这个数字就是素数。

答案 1 :(得分:1)

好吧,使用BigInteger,无论您目前在哪里long。不使用%,而是使用mod,而不是递增,您将使用i = i.add(BigInteger.ONE),而不是== 0,您将使用equals(BigInteger.ZERO)等。

也可以使用Scanner.nextBigInteger代替Scanner.nextLong

鉴于这看起来像某些描述的家庭作业(当然可能是自我设定),我不会为你写出整个代码 - 但如果你有特定的问题,请随时提问。