|
|
Знаете ли Вы, что ... | |
...нарушения правил форума наказываются. Старайтесь их не нарушать. | |
<< Предыдущий совет - Случайный совет - Следующий совет >> |
Программирование Обсуждаются вопросы мира программирования. Слово программирование отпугивает некоторых... Не бойтесь, заходите учитесь, помогайте, обучайте... |
Ответить |
|
Опции темы | Опции просмотра |
14.05.2011 12:29 | #32 |
ЕС
|
__________________
ZiyoNet.uz - Образовательный портал с элементами соцсети. |
|
Ответить |
14.05.2011 13:16 | #34 |
|
Эта формула не видна на скатерти Улама. Чтобы ее увидеть, нужно в качестве начального числа спирали выбрать 41. Тогда отчетливо получится прямая, содержащая 40 последовательных простых чисел. Воспользуйтесь простенькой программой на русском языке для всяческих экспериментов с визуализацией
__________________
http://www.matholymp.zn.uz Последний раз редактировалось Shuhrat Ismailov; 14.05.2011 в 13:23. |
|
Ответить |
"+" от:
|
14.05.2011 15:49 | #35 |
ЕС
|
Спасибо, занятная штука!
__________________
ZiyoNet.uz - Образовательный портал с элементами соцсети. |
|
Ответить |
Реклама и уведомления | |
16.05.2011 12:26 | #36 | |
ex-wild_John
Супермодератор |
Цитата:
Код:
#include <iostream> int main() { int size=5000000; bool num[size]; for (int i=0;i<size;i++) num[i]=true; num[0]=num[1]=false; for (int i=2;i<size;i++) { if (num[i]) { int count=2; while (i*count<size) num[i*count++]=false; } } for (int i=2;i<size;i++) if (num[i]) std::cout<<i<<"\n"; return 0; } Код:
#include <iostream> int main() { int size=5000000; bool isPrime[size]; for (int i=0;i<=size;i++) isPrime[i]=(i%2==1); isPrime[0]=isPrime[1]=false; for (int i=3;i<=size/3;i+=2) for (int j=3;j<=size/i;j+=2) isPrime[i*j]=false; for (int i=0;i<=size;i++) if (isPrime[i]) std::cout<<i<<endl; }
__________________
Герман - это не имя, это особое состояние души (Джим Анджер) |
|
|
Ответить |
3 "+" от:
|
17.05.2011 00:48 | #37 |
Сообщений: 1,306
+ 885
788/480
– 0
51/26
|
Да, это оно самое..
Можно попробовать и сюда внести уже преложенные Вами улучшения возможно это чуточку ускорило бы его Например for (int i=2;i<size;i++) заменить на for (int i=2;i<sqrt(size);i++) а так же int count=2; заменить на int count=i; Ваш замечательный алгоритм мог бы выглядить например так: Код:
#include <iostream> int main() { int size=5000000; bool num[size]; for (int i=0;i<size;i++) num[i]=true; num[0]=num[1]=false; for (int i=2;i<sqrt(size);i++) { if (num[i]) { int count=i; while (i*count<size) num[i*count++]=false; } } for (int i=2;i<size;i++) if (num[i]) std::cout<<i<<"\n"; return 0; } |
|
Ответить |
2 "+" от:
|
17.05.2011 09:25 | #38 |
ЕС
|
Может лучше <sqrt(size+1) на всякий случай? Чтобы не пропустить числа близкие к корню.
__________________
ZiyoNet.uz - Образовательный портал с элементами соцсети. |
|
Ответить |
17.05.2011 12:42 | #39 | |
ex-wild_John
Супермодератор |
Цитата:
__________________
Герман - это не имя, это особое состояние души (Джим Анджер) |
|
|
Ответить |
"+" от:
|
|