powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / почему так долго считает программа?
19 сообщений из 19, страница 1 из 1
почему так долго считает программа?
    #33926399
shtril
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
class Tmp
{
public static void main(String[] args)
{
int j=0,i=0;

for(i=1000; i<999999;i++)
{

for( j=2;j<i;j++)
{
if(i%j==0) {break ;}

}
if(i==j) System.out.print(i+",");

}
System.out.println("Hello World!");
}
Вот и весь код....
ПРоверил для чисел от 1 до 1000
все пучком
Запустил от 1000 до ...
считает 2 часа.... и не вижу конца
АМД7-550
...
Рейтинг: 0 / 0
почему так долго считает программа?
    #33926473
fjord
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
     public   static   void  main(String[] args) {
         int  j= 0 ,i= 0 ;
         long  count= 0 ;
        
         for (i= 1000 ; i< 999999 ;i++)
        {
             for ( j= 2 ;j<i;j++){
                 if (i%j== 0 ) { break  ;}
                count++;
            }
             if (i==j) System.out.println(i); 
        }
        System.out.println("Hello World!");
        System.out.println("Жесть " + count);
    }

мдее.., мой Athlon 3000 пыхтел (total time: 17 minutes 3 seconds).count досчитал до 37566327799. За что же вы так компьютеры не любите ))
...
Рейтинг: 0 / 0
почему так долго считает программа?
    #33926863
Satrac
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поставь два System.out.println, будет еще дольше. Вывод в консоль занимает много времени.
...
Рейтинг: 0 / 0
почему так долго считает программа?
    #33927022
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SatracПоставь два System.out.println, будет еще дольше. Вывод в консоль занимает много времени.

ага, а если умножить время вывода в консоль System.out.println на количество итераций то и получим большое время выполнения. :)

отсюда вывод - в цикле предназначенном для операций одного класса трудоемкости (например арифметическим операциям) нельзя совмещать операции дргугого класса трудоемкости (ввод/вывод например)..

если нужно выводить на экран результат каждой итерации, воспользуйтесь строковым буффером либо потоком, вот так:


1 вариант оптимизации - Строковый Буффер:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
 public   static   void  main(String[] args)
{

StringBuilder buff =  new  StringBuilder ();
 int  j= 0 ,i= 0 ;

 for (i= 1000 ; i< 999999 ;i++)
{

 for ( j= 2 ;j<i;j++)
{
 if (i%j== 0 ) { break  ;}

}
 if (i==j) 
   //System.out.print(i+",");            
   buff.append(i).append(",");

}
System.out.println("Hello World!");
System.out.println("result is ");
System.out.println(buff.toString());

}



2. Вариант с потоком
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
 public   static   void  main(String[] args)  throws  Exception
{

OutputStream os =  new  ByteArrayOutputStream();
 int  j= 0 ,i= 0 ;

 for (i= 1000 ; i< 999999 ;i++)
{

 for ( j= 2 ;j<i;j++)
{
 if (i%j== 0 ) { break  ;}

}
 if (i==j) 
   //System.out.print(i+",");            
   os.write(Integer.toString(i).getBytes());
   os.write(",".getBytes());
}

os.flush();
System.out.println("Hello World!");
System.out.println("result is " +  new  String (os.toByteArray()) );
os.close();

}
...
Рейтинг: 0 / 0
почему так долго считает программа?
    #33927616
й
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сижу читаю книжку про .NET, самое начало, как раз рассказывается как выполняются методы на примере writeline и говорится о том что только при первом вызове "теряется производительность", и все последующие обращения выполняются "на полной скорости" : повторная верификация и компиляция не производится. - значит ли что там не будет проблем подобной здесь?
впрочем, прога простая, сейчас проверю :)
...
Рейтинг: 0 / 0
почему так долго считает программа?
    #33927641
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
йсижу читаю книжку про .NET, самое начало, как раз рассказывается как выполняются методы на примере writeline и говорится о том что только при первом вызове "теряется производительность", и все последующие обращения выполняются "на полной скорости" : повторная верификация и компиляция не производится. - значит ли что там не будет проблем подобной здесь?
впрочем, прога простая, сейчас проверю :)
Причем тут верификация и затраты на ввод-вывод?
...
Рейтинг: 0 / 0
почему так долго считает программа?
    #33927775
Satrac
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
значит ли что там не будет проблем подобной здесь?
Не путай кислое с длинным. Вызов метода - это вызов метода. Тормоза вызывает выполнение метода. Итерации без вывода пройдут гораздо быстрее, т.к. главный поток не будет тормозить for для вывода.
...
Рейтинг: 0 / 0
почему так долго считает программа?
    #33927890
ы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ы
Гость
йсижу читаю книжку про .NET

Дружок, а ты форумом не ошибся?
...
Рейтинг: 0 / 0
почему так долго считает программа?
    #33927977
й
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SatracНе путай кислое с длинным. Вызов метода - это вызов метода. Тормоза вызывает выполнение метода. Итерации без вывода пройдут гораздо быстрее, т.к. главный поток не будет тормозить for для вывода.

я потому книжки и читаю, вопросы на форумах задаю - чтоб меньше путать )
только что выполнил с выводом и без, в обоих случаях выполнение заняло ровно 20 минут , интересно кто-что путает,а ? :)

ыДружок, а ты форумом не ошибся?
да нет, я вообще яву люблю ) чисто случайно книжка под руку попалась, строчка в ней и этот тред, всё так совпало - наверно звёзды..))
...
Рейтинг: 0 / 0
почему так долго считает программа?
    #33928081
fjord
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(total time: 17 minutes 3 seconds) count = 37566327799
17*60+3=1023
37566327799/1023=36721728 итераций в сек.
а может это нормаьно?
...
Рейтинг: 0 / 0
почему так долго считает программа?
    #33928374
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fjord(total time: 17 minutes 3 seconds) count = 37566327799
17*60+3=1023
37566327799/1023=36721728 итераций в сек.
а может это нормаьно?

оптимизировать нужно алгоритм который вы задали..
попробуйте развернуть цикл немного или заменить операцию i%j какой нибудь другой. а что касается операции вывода System.out... то в любом лучше ее выносить за пределы цикла где идет расчет
...
Рейтинг: 0 / 0
почему так долго считает программа?
    #33928397
unicornmirage
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
й что только при первом вызове "теряется производительность", и все последующие обращения выполняются "на полной скорости" : повторная верификация и компиляция не производится. - значит ли что там не будет проблем подобной здесь?
впрочем, прога простая, сейчас проверю :)

в яве тоже есть такое - называется JIT-компилятор.
...
Рейтинг: 0 / 0
почему так долго считает программа?
    #33928466
Satrac
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
только что выполнил с выводом и без, в обоих случаях выполнение заняло ровно 20 минут , интересно кто-что путает,а ? :)
Я недавно писал приладу, в которой логгировал на экран. Выводилось порядка 10000 записей. Работала она 20 секунд. Без вывода на экран работала 4.
А почему так у тебя... Хз. В код не вдумывался, просто наступал на подобные грабли.
...
Рейтинг: 0 / 0
почему так долго считает программа?
    #33928597
й
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Satrac
Работала она 20 секунд. Без вывода на экран работала 4.
А почему так у тебя... Хз. я ведь в вижуал студии тестил, не в яве.. вот в чём вопрос ))

unicornmirage

в яве тоже есть такое - называется JIT-компилятор.
на свете столько всего интересного ))
...
Рейтинг: 0 / 0
почему так долго считает программа?
    #33929680
shtrilВот и весь код....
ПРоверил для чисел от 1 до 1000
все пучком
Запустил от 1000 до ...
считает 2 часа.... и не вижу конца
АМД7-550

Нельзя же так грубо считать простые числа...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
     public   static   void  main(String[] args) {
         for  ( int  i =  1000 ; i <  999999 ; i++) {
             if  (isPrime(i)) {
                System.out.println(i);
            }
        }
        System.out.println("Hello World!");
    }

     private   static   boolean  isPrime( int  i) {
         for  ( int  j =  2 ; j < Math.sqrt(i); j++) {
             if  (i % j ==  0 ) {
                 return  false;
            }
        }
         return  true;
    }
...
Рейтинг: 0 / 0
почему так долго считает программа?
    #33929833
shtril
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да знаю я как искать простые числа....
Соль не в этом....
Задача решилась простым перенапралением вывода в массив, а затем массива на экран.... Все прошло быстро и качественно
А я то думал, что цифирки будут по 1 выскакивать, а я играть в карты и смотреть появление их на экране, просто поразмышлять ...
Ну нет у меня опыта писать на Джаве... Ну и напоролся на грабли-очевидно все цифирки ложились куда-то в буфер, запоминались, преобразовывались....
А время шло...
Спасибо всем ответившим
...
Рейтинг: 0 / 0
почему так долго считает программа?
    #33935609
ПсоП
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А если еще не на J делить, а сделать массив простых чисел, а J - индекс по этому массиву...
...
Рейтинг: 0 / 0
почему так долго считает программа?
    #33935640
Athlon Barton 2500+
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПсоПА если еще не на J делить, а сделать массив простых чисел, а J - индекс по этому массиву...

а если развернуть внутренний цикл хотя бы на 16 подряд итераций, то ваще будет круто!
...
Рейтинг: 0 / 0
почему так долго считает программа?
    #33936539
NotGonnaGetUs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Athlon Barton 2500+ ПсоПА если еще не на J делить, а сделать массив простых чисел, а J - индекс по этому массиву...

а если развернуть внутренний цикл хотя бы на 16 подряд итераций, то ваще будет круто!

А ты сначала разверни.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / почему так долго считает программа?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]