Как использовать BigInterger в моем коде для вычисления простых чисел? - PullRequest
0 голосов
/ 10 марта 2011

Я использую этот простой и грубый код ниже для вычисления простых чисел, а затем экспортирую их в текстовый файл:

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


    }
}

Я хотел бы найти простые числа за пределами диапазона Primary long, и, очевидно, большое целое число - это путь для этого. Так как мне изменить свой код, чтобы сделать это?

Ответы [ 2 ]

3 голосов
/ 10 марта 2011

Тебе это действительно нужно?Если число больше, чем можно обработать с помощью long , это означает, что вы хотите протестировать числа, превышающие 9223372036854775807. Если ваш цикл for может проверять сто миллионов делений в секунду, ему все равно потребуется 2923 года, чтобы определить,число простое - и, конечно, больше для больших чисел.

Распространенной оптимизацией является проверка только делений до sqrt (num).Если вы ничего не нашли, тогда число простое.

1 голос
/ 10 марта 2011

Хорошо, используйте BigInteger везде, где у вас есть long. Вместо % вы будете использовать mod, вместо увеличения вы будете использовать i = i.add(BigInteger.ONE), вместо == 0 вы будете использовать equals(BigInteger.ZERO) и т. Д.

Используйте Scanner.nextBigInteger вместо Scanner.nextLong тоже.

Учитывая, что это похоже на домашнее задание некоторого описания (возможно, самоопределения, конечно), я не буду выписывать весь код для вас - но если у вас есть конкретные проблемы, не стесняйтесь спрашивать.

...