Вычисление простых чисел с длинным (Java) - PullRequest
1 голос
/ 22 марта 2019

Я хочу написать небольшую программу, которая сможет найти первые 10-значные простые числа из числа Эйлера.

Число на 99-м месте - это число, которое я ищу, но метод isPrim () не отвечает правильно. Вы видите, что пошло не так?

Мой код

public class Main {

    public static final String e = "27182818284590452353602874713526624977572470936999595749669676277240766303535475945713821785251664274274663919320030599218174135966";


    public static void main(String[] args) {
        System.out.println(e);
        for (int i = 0; i < e.length() - 10; i++) {

            String str = e.substring(i, i + 10);

            long num = Long.parseLong(str);

            boolean isPrim = isPrim(num);

            if (isPrim == true) {
                System.out.println("First prime: " + num);
                break;
            }

            System.out.println(i + " " + str + " " + isPrim);

        }

    }

    public static boolean isPrim(long number) {
        if (number % 2 == 0) {
            return false;
        }
        for (int j = 3; j * j < number; j+=2) {
            if (number % j == 0) {
                return false;
            }
        }
        return true;
    }
}

1 Ответ

2 голосов
/ 22 марта 2019

Должно быть j * j <= number, иначе вы будете рассматривать квадраты простых чисел как простые числа. То есть ваш метод говорит, что 9 является простым, потому что нет делителей меньше, чем sqrt(9).

Кроме того, ваш код, вероятно, найдет простое число, которое короче 10 цифр, поскольку он проверяет все 10-значные подстроки E, включая те, которые имеют начальные нули, такие как 0452353602.

Кроме того, вам нужно изменить тип j на long, чтобы избежать переполнения.

...