x, любопытные наблюдения. Единственное несоответствие типов данных - это корень, но его достаточно округлить. Хочешь сказать что надо
long вместо
int? Не помню, ибо 6 лет не прикасался к Java. И
какой синтаксис _весь_ ошибочный?
Специфика: ты не выводишь число 1 (в задании требовалось, мелочь, я придирчивый).
Неучтённые тобой оптимизации:
1)корень достаточно округлить вниз (а не в ближайшую сторону), но это мелочь.
2)Не надо "+1" и "<", когда можно "<=", тоже мелочь.
3)Делимое и делитель достаточно гонять по нечётным числам => сужается перебор. Делимое и так отсеклось бы на двойке, а вот делитель - двойная работа.
Comrade_V прав.
4)Около 10000 вызовов функции менее чем за секунду - недёшево (call и ret, параметры, локальные переменные), куда лучше сделать вложенный цикл и break вместо return.
И при этом корень всё равно рулит

Учтя пожелания, думаю снизишь время ещё существеннее. А вообще я ожидал большей разницы => где-то ты зарыл собаку. Возможно из-за того, что чисто на вывод чисел уходит львиная часть времени. Для справки, сколько времени ушло бы (на твоём компе) на примитив вроде этого (2500 можно заменить на количество простых чисел)
Код: Выделить всё
public class LowerBound
{public static void main(String[] args)
{long t1=System.currentTimeMillis();
int m=1000,n=2500;
for(int i=0;i<n;++i)
System.out.println(m);
long t2=System.currentTimeMillis();
long t=t2-t1;
System.out.println("vremya = " + t);
}
}
Предвосхищаю вывод: разница во времени должна быть более драматичной если бы задача ставилась вывести
количество простых чисел. [off]Спасибо за интересную дискуссию.[/off]