Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.57/44: Рейтинг темы: голосов - 44, средняя оценка - 4.57
Мой лучший друг-отладчик!
167 / 167 / 30
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
1

Конкурс(поиск простых чисел)

24.07.2012, 20:30. Показов 8558. Ответов 74
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Я тут подумал, посмотрел по теме Hello world'a как всем нравится находить изощренные способы.Так вот - задание на засыпку: написать программу, вычисляющую простые числа от 1 до 300000.Программа ДОЛЖНА работать за 6 секунд.Обьем памяти неограничен.За 6 сек должна работать на процессоре примерно таком - 2 ядра по 3.2 ггц каждое!

Ну что, кто напишет?))) Кто напишет, тому спасибо поставлю)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.07.2012, 20:30
Ответы с готовыми решениями:

Поиск простых чисел
Всем привет, прохожу книгу Шилдта и остановился на программе:...

Поиск простых чисел
помогите пожалуйста с заданием напишите программу которая при помощи двух вложенных циклов for и...

Поиск простых чисел
Знаю, что тема избитая, но решил написать алгоритм поиска простых чисел. int j,i,k /*количество...

Поиск простых чисел
Почему мне возвращает просто непарные числа? в чем загвоздка #include <iostream> bool...

74
27 / 27 / 4
Регистрация: 02.11.2010
Сообщений: 370
30.07.2012, 02:46 41
Author24 — интернет-сервис помощи студентам
Доработал. Работает за 1.326

http://zalil.ru/33624008

Добавлено через 29 секунд

Не по теме:

ForEveR, ищи письмо в лс

0
70 / 64 / 5
Регистрация: 09.06.2012
Сообщений: 291
30.07.2012, 03:50 42
Ksan, Не соответствует заданию
написать программу, вычисляющую простые числа от 1 до 300000
0
27 / 27 / 4
Регистрация: 02.11.2010
Сообщений: 370
30.07.2012, 05:51 43
xADMIRALx, я же уже написал
припишу что-нибудь вроде n+1-3+2
вот, пожалуйста: вычисление
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
30.07.2012, 05:52 44
Цитата Сообщение от Ksan Посмотреть сообщение
Раз уж о времени компиляции не говорили. А лишь о времени выдачи. И вообще.
Вообщем, извратился.

Время на все про все заняло "2.558"

как таковая библиотека нужна только одна: stdio.h
остальные для вывода времени и что бы не вылетала консоль


Уж не поленитесь, скачайте. Форум печатать отказался.
http://zalil.ru/33623938

Добавлено через 1 минуту
И, между прочим, компилится довольно быстро. Даже очень.
13 секунд.
0
27 / 27 / 4
Регистрация: 02.11.2010
Сообщений: 370
30.07.2012, 05:52 45
alsav22, компиляция или выполнение?
и на каких характеристиках компьютера?
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
30.07.2012, 06:30 46
Цитата Сообщение от Ksan Посмотреть сообщение
Доработал. Работает за 1.326

http://zalil.ru/33624008

Добавлено через 29 секунд

Не по теме:

ForEveR, ищи письмо в лс

12 секунд.

Добавлено через 6 минут
Цитата Сообщение от Ksan Посмотреть сообщение
alsav22, компиляция или выполнение?
и на каких характеристиках компьютера?
Выполнение. Компиляция - секунды. Посмотрите в предыдущих постах за сколько другие варианты выполнялись (особенно у diagon), при тех же характеристиках компа. (два ядра 3,21ГГц, ОЗУ 4Гб). Перевод строки замедляет выполнение, больше чем, в 3 раза . Нужно через пробел выводить.
0
70 / 64 / 5
Регистрация: 09.06.2012
Сообщений: 291
30.07.2012, 07:56 47
alsav22, вить в задание не указано что нежен пробел или перевод строки
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
30.07.2012, 09:10 48
Цитата Сообщение от xADMIRALx Посмотреть сообщение
alsav22, вить в задание не указано что нежен пробел или перевод строки
И что? Конкурс в чём? Сделать код как можно более бысрым и, разумеется, чтобы числа можно было прочесть. Я просто написал, что перевод строки замедляет вывод. И чтобы с другими выриантами можно было сравнивать.
0
Временно недоступен
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
30.07.2012, 23:45 49
Знатоки, просветите, пожалуйста, как находят, например, числа Мерсенна? Я имею в виду, чисто алгоритмически, как это делается? И почему это делают с помощью распределённых вычислений,- они находят, а потом проверяют его, что-ли?
0
alkagolik
31.07.2012, 02:47
  #50

Не по теме:

#pragma, юморишь?

1
Временно недоступен
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
31.07.2012, 02:52 51
Нет, я честно не знаю. Ну есть формула 2^n-1 - так и ищут, а потом проверяют, или есть более простые способы? Просто мне кажется странным факт из Википедии, что на данный момент известно лишь 47 чисел Мерсенна

Не по теме:

интересно ещё, как у них числа таких порядков хранятся, в которых по 10 млн цифр..

0
Заблокирован
31.07.2012, 03:10 52
#pragma, не https://www.cyberforum.ru/cgi-bin/latex.cgi?2^{n} - 1 , а https://www.cyberforum.ru/cgi-bin/latex.cgi?2^{p} - 1, р - простое число. Проверяется с помощью теста Люка — Лемера. Ничего странного тут нет, наибольшее известное число Мерсена https://www.cyberforum.ru/cgi-bin/latex.cgi?2^{43,112,609} - 1 на минуточку...
1
Временно недоступен
957 / 228 / 14
Регистрация: 12.04.2009
Сообщений: 926
31.07.2012, 03:15 53
alkagolik, Спасибо , я просто неправильно понял написанное )
То есть
3, 7, 31, 127, 2047, 8191, 131071, 524287, 8388607, 536870911, 2147483647, … (последовательность A001348 в OEIS)
в этой последовательности не обязательно все числа простые, а только некоторые?
0
Заблокирован
31.07.2012, 03:40 54
#pragma, в ней все числа простые. Но, это простые числа Мерсена, полученные с помощью формулы выше и прошедшие тест на простоту.
0
63 / 58 / 14
Регистрация: 14.12.2011
Сообщений: 193
31.07.2012, 12:45 55
C++
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
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
#include <math.h>
using namespace std;
 
#define N 300000
int main()
{
    int count = 1;
    int mass[26000] = {1,2};    // ~26000 simple numbers 1..300k 
    bool flag = false;
 
    for(int i = 3 ; i < N ; i += 2 )
    {
        flag = true;
 
        for(int j = 2 ; j < count ; j++)
        {
            if(!(i % mass[j]) )
            {
                flag = false;
                break;
            }
            else if(mass[j] >= sqrt(i))
            {
                break;
            }
 
        }
 
        if(flag)
        {
            cout << i << endl;
            mass[++count] = i;
        }
    }
    return 0;
}
Миниатюры
Конкурс(поиск простых чисел)  
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
31.07.2012, 14:05 56
15 секунд.
0
63 / 58 / 14
Регистрация: 14.12.2011
Сообщений: 193
31.07.2012, 14:55 57
Это время исполнения 15 сек? на какой машине?
0
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
31.07.2012, 16:03 58
Цитата Сообщение от Dr.Urban Посмотреть сообщение
Это время исполнения 15 сек? на какой машине?
Смотрите 46 пост.
0
Заблокирован
31.07.2012, 16:45 59
alsav22, что-то ты людей путаешь постоянно.
время
Bash
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
indicator@pc-host:~$ cat test.cc
#include <iostream>
#include <math.h>
using namespace std;
 
#define N 300000
int main()
{
    int count = 1;
    int mass[26000] = {1,2};    // ~26000 simple numbers 1..300k 
    bool flag = false;
 
    for(int i = 3 ; i < N ; i += 2 )
    {
        flag = true;
 
        for(int j = 2 ; j < count ; j++)
        {
            if(!(i % mass[j]) )
            {
                flag = false;
                break;
            }
            else if(mass[j] >= sqrt(i))
            {
                break;
            }
 
        }
 
        if(flag)
        {
            cout << i << endl;
            mass[++count] = i;
        }
    }
    return 0;
}
indicator@pc-host:~$ g++ -s -O2 test.cc -o test
indicator@pc-host:~$ time ./test > file
 
real    0m0.166s
user    0m0.044s
sys 0m0.116s
indicator@pc-host:~$ time ./test
...
real    0m0.408s
user    0m0.052s
sys 0m0.096s
indicator@pc-host:~$ lscpu
Architecture:          i686
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                2
On-line CPU(s) list:   0,1
Thread(s) per core:    1
Core(s) per socket:    2
Socket(s):             1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 15
Stepping:              13
CPU MHz:               1200.000
BogoMIPS:              4400.22
L1d cache:             32K
L1i cache:             32K
L2 cache:              2048K
indicator@pc-host:~$
0
Higher
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
31.07.2012, 16:52 60
Цитата Сообщение от alkagolik Посмотреть сообщение
alsav22, что-то ты людей путаешь постоянно
Он же тестирует с выводом на консоль)
Банально посчитать простые числа до 300 000 тривиально, это делается за несколько миллисекунд, однако вывод на консоль занимает секунд 5.
Собственно, в моей программке почти незаметная пауза перед выводом - это вычисление всех простых чисел и забивание их в строку, дальше я просто вывожу эту строку с помощью fwrite(пробовал через writefile из winapi, но он почему-то отказывался выводить более-менее длинные строки).
0
31.07.2012, 16:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.07.2012, 16:52
Помогаю со студенческими работами здесь

Поиск простых чисел
to idetify if the given K is prime or not. Prime number is the number that can be divided by 1 and...

Поиск простых чисел
#include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;locale.h&gt; using namespace std; int y;...

Поиск простых чисел
необходимо найти все простые числа от 1 до 100. Вот я написал код: #include &lt;iostream&gt; #include...

Поиск простых чисел
Народ, в программе нужно из введённых чисел найти и вывести простые числа(т.е. 2,3,5,7,11,13... и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru