Вверх ↑
Этот топик читают: Гость
Ответов: 176
Рейтинг: 12
#1: 2007-03-01 21:33:36 ЛС | профиль | цитата
Написал программу для нахождения простых чисел. (Простые числа это такие числа которые делятся без остатка только на 1 и на само себя). Эти числа можно найти только полным перебором. Закономерность ищё не найдена.

code_1026

Если искать числа например от 1 до 10000, то программа загружает процессор на 100% около 1 минуты. Во время выполнения окно программы как бы зависает. Тоесть если двинуть мышкой, или переташить, свернуть, развернуть окно программы оно не подаёт никаких "признаков жизни" пока не кончится перебор чисел.

Давайте подумаем как исправить такое зависание. Если мне не изменяет память, на visual basic есть такая функция, которая при каждой итерации цикла проверяет были ли сделаны изменения (сдвинута мышка, изменилось окошко программы) и если они были сделаны, то не начинает новый такт цикла пока не "перерисуется" окно программы.
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
файлы: 1code_1026.txt [2.9KB] [268]
Разработчик
Ответов: 26163
Рейтинг: 2127
#2: 2007-03-01 21:54:31 ЛС | профиль | цитата
toropchin, попробуй вот так с системным потоком code_1027
карма: 22

0
файлы: 1code_1027.txt [2.9KB] [443]
Ответов: 176
Рейтинг: 12
#3: 2007-03-01 22:07:14 ЛС | профиль | цитата
Отлично! Спасибо. Я до сих пор понять не мог для чего применять этот компонент параллельного потока
карма: 0
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 9906
Рейтинг: 351
#4: 2007-03-01 22:14:09 ЛС | профиль | цитата
toropchin,
1) белые люди проверяют делимость не на все что ни поподя, а только среди простых чисел, найденные ДО этого, и не больше корня из тестируемого числа.
2) проверка на делимость - это просто равество нулю остатка X mod Y
карма: 9

0
Ответов: 2125
Рейтинг: 159
#5: 2007-03-01 23:52:35 ЛС | профиль | цитата
toropchin писал(а):
Если искать числа например от 1 до 10000

Для таких маленьких чисел и современных объёмов памяти, решето Эратосфена - самое то. Учитывая, что вычёркивать нужно будет около 40 раз, думаю, за пару секунд уложится

[size=-2]------ Добавлено в 23:33
Меньше 2-х секунд даже на PII-400
code_1028

[size=-2]------ Добавлено в 23:43
Даже до 1000000 всего 14 секунд

[size=-2]------ Добавлено в 23:52
10 000 000 - 4 с половиной минуты Правда, большую часть времени заполнялся ListBox
карма: 1

0
файлы: 1code_1028.txt [1.3KB] [313]
Разработчик
Ответов: 26163
Рейтинг: 2127
#6: 2007-03-01 23:55:42 ЛС | профиль | цитата
tsdima, а единица куда пропала?
карма: 22

0
Ответов: 8928
Рейтинг: 823
#7: 2007-03-02 00:03:53 ЛС | профиль | цитата
nesco, а единица вычеркнулась
карма: 19

0
Ответов: 2125
Рейтинг: 159
#8: 2007-03-02 00:15:10 ЛС | профиль | цитата
nesco, там и двойка выводится отдельно
карма: 1

0
Разработчик
Ответов: 26163
Рейтинг: 2127
#9: 2007-03-02 00:24:42 ЛС | профиль | цитата
tsdima, а вот так при 10 000 000 в два раза быстрее code_1029
карма: 22

0
файлы: 1code_1029.txt [1.5KB] [447]
Ответов: 2125
Рейтинг: 159
#10: 2007-03-02 14:09:40 ЛС | профиль | цитата
nesco, на однопроцессорной машине (и без HyperThreading) - на 17% дольше. Конфигурацию компа огласите Как пить дать - двух-ядерный проц.
карма: 1

0
10
Сообщение
...
Прикрепленные файлы
(файлы не залиты)