Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Java-программирование: помощь с написанием кода

Дмитрий Павелко Ученик (106), на голосовании 2 месяца назад
Ребята, всем привет! Казалось бы простая программа стала для меня проблемой, на которую я потратил практически 4 часа. Суть задачи: "Напишите программу, которая находит 5 простых чисел, которые больше Long.MAX_VALUE."
Мой код во вложении. При запуске, кода, Цикл просто не завершается, но я не могу понять в чем проблема... Очень нужна помощь гуру программирования.

Голосование за лучший ответ
Оракул Оракул (62084) 3 месяца назад
В комменте ошибся одной штукой, не удалить
У вас вообще не проверка чисел на простоту и не поиск их числа. Непонятно, что.
Не завершается, т.к. это дичайше долго
 import java.math.BigInteger; 

import static java.lang.Long.MAX_VALUE;
import static java.math.BigInteger.*;

public class Test {

public static void main(String[] args) {
var n = BigInteger.valueOf(MAX_VALUE).add(TWO);
int count = 0;

while (count < 5) {
if (isPrime(n)) {
System.out.println(n);
count++;
}
n = n.add(TWO);
}
}

private static boolean isPrime(BigInteger n) {
for (var i = BigInteger.valueOf(3); i.compareTo(n.sqrt()) <= 0; i = i.add(TWO)) {
if (n.mod(i).compareTo(ZERO) == 0) {
return false;
}
}
return true;
}
}
ОракулОракул (62084) 3 месяца назад
Вот так выглядит классический поиск простых чисел, но для таких огромных чисел - это ДИЧАЙШЕ долго все равно
 public class Test { 

public static void main(String[] args) {
var n = BigInteger.valueOf(MAX_VALUE).add(ONE);
int count = 0;
int i = 0;

while (count < 5) {
if (isPrime(n)) {
System.out.println(n);
count++;
}
n = n.add(TWO);
System.out.println(i++);
}
}

private static boolean isPrime(BigInteger n) {
for (var i = BigInteger.valueOf(3); i.compareTo(n.sqrt()) <= 0; i = i.add(TWO)) {
if (n.mod(i).compareTo(ZERO) == 0) {
return true;
}
}
return false;
}
}
Дмитрий ПавелкоУченик (106) 3 месяца назад
Спасибо большое за помощь!
Оракул Оракул (62084) Дмитрий Павелко, стандартные оптимзации поиска простых чисел игнорировать четные числа, простыми могут быть только нечетные и 2 игнорировать четные делители, нечетные числа делятся только на нечетные максимальный делитель не может быть больше квадратного корня числа Но это не работает при таких больших числах, тут какое-то хитровыделанное решение алгосов нужно, но я не знаю таких
Похожие вопросы