Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
1 / 1 / 0
Регистрация: 22.10.2013
Сообщений: 68

Вычислить все простые числа до n

10.02.2014, 07:31. Показов 2351. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! при программировании у меня возникла необходимость вычислить все простые числа до n,в сетях я нашел код :
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
# include <iostream>
 using namespace std;
 bool a[100000000];
 
int main()
{ 
    a[0]=true;
    a[1]=true; 
    for(long long i=2; i<=100000000; ++i)
    {
            if(a[i]==false)
            {
                           if(i*i<=100000000)
                           {
                                          for(long long j=i*i; j<=100000000; j+=i)
                                          {
                                                   a[j]=true;
                                          }
                           }
            }
    } 
    for(long long i=1; i<=100000000; ++i)
    {
            if(a[i]==false)
            cout <<i<<" ";
    }
    system("pause");
}
как ее нужно переделать на виндоус форм скнопкой вычисления

как ее переделать так, чтобы n вводилось вручную,и если получится все это сдлать на форме, т.е с простым интерфейсом? жду предложении и наставлении программистов)))
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.02.2014, 07:31
Ответы с готовыми решениями:

Задача про простые числа. Выпишите все простые числа, находящиеся в интервале между а и б
#include &lt;stdio.h&gt; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; using std::cout; using std::cin; using...

Найти все трехзначные простые числа. Определить функцию позволяющую распознавать простые числа
Найти все трехзначные простые числа. Определить функцию позволяющую распознавать простые числа. Простые числа это когда они делятся только...

Реализовать сортировку массива: в начало поместить все простые числа, а затем все остальные
Ребят, не могу отсортировать массив. Нужно, чтобы сначала шли все простые числа из массива, а затем все остальные. Что не так? #include...

30
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 867
Записей в блоге: 1
10.02.2014, 20:07
Цитата Сообщение от Жасулан Посмотреть сообщение
как ее переделать так, чтобы n вводилось вручную,и если получится все это сдлать на форме, т.е с простым интерфейсом? жду предложении и наставлении программистов)))
А вы знаете как вообще формы создаются с элементами? (Cli, MFC и WinApi)? Отсюда и код будет разный...
0
1 / 1 / 0
Регистрация: 22.10.2013
Сообщений: 68
11.02.2014, 07:48  [ТС]
mustimur, да я создаль форму на CLI и у меня там уже есть одна процедура,сам алгоритм диффи- хеллмана,и хотелось бы в это окно дбавить типа генератор простых чисел
0
55 / 48 / 13
Регистрация: 31.10.2013
Сообщений: 166
11.02.2014, 09:11
А вы пробовали оптимизировать вашу программу, убрав заведомо непростые числа, речь идет о четных числах.
0
1 / 1 / 0
Регистрация: 22.10.2013
Сообщений: 68
11.02.2014, 09:16  [ТС]
ShadowFirst, нет этот вариант исключен, потому что в больших простых числах может встретиться четное простое число

Добавлено через 48 секунд
хотя 2-2000 только 2 четное))
0
 Аватар для druidich
30 / 30 / 12
Регистрация: 21.05.2012
Сообщений: 448
11.02.2014, 09:28
Жасулан,
Цитата Сообщение от Жасулан Посмотреть сообщение
нет этот вариант исключен, потому что в больших простых числах может встретиться четное простое число
как так? если оно четное то оно уже не простое ! ну или приведите пример
разумней делать проверку на четность, т.е. не просто делить число на 2, а взять последнюю цифру числа и поделить ее на 2. Затем проверить на деление на 3 (сумма цифр числа делиться на 3 => не простое).
0
55 / 48 / 13
Регистрация: 31.10.2013
Сообщений: 166
11.02.2014, 09:39
Вот именно два четное, но никто не говорит что нельзя пропускать дальше. Начинать например сразу с нечетных чисел, в частности с 3, с шагом два. Вот примерная реализация:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# include <iostream>
 using namespace std;
 bool a[100000000];
 
int main()
{ 
    a[0]=a[1]=a[2]=true;
    for (long i=3; i<100000000; i+=2) a[i+1]=!a[i]=true;
    for(long i=3; i<100000000; i+=2)
    {
            if(a[i]==true)
            {
               for (long j=i*2; j<100000000;j+=i*2)  a[i]=false;
            }
    } 
    for(long i=2; i<100000000; ++i)
    {
            if(a[i]==false)
            cout <<i<<" ";
    }
    system("pause");
}
Вроде посимпатичнее будет и минус один цикл. И кстати единица не является простым числом, простые числа идут с двойки. И еще на с++ нумерация массива идет с нуля по этому в окончании цикла должно быть строгое неравенство.
0
1 / 1 / 0
Регистрация: 22.10.2013
Сообщений: 68
11.02.2014, 09:58  [ТС]
for (long i=3; i<100000000; i+=2) a[i+1]=!a[i]=true; выдает ошибку error C2106: =: левый операнд должен быть левосторонним значением??? и как его записать на процедуру кнопки в форме? заранее спасибо
0
55 / 48 / 13
Регистрация: 31.10.2013
Сообщений: 166
11.02.2014, 10:04
Цитата Сообщение от Жасулан Посмотреть сообщение
for (long i=3; i<100000000; i+=2) a[i+1]=!a[i]=true; выдает ошибку error C2106: =: левый операнд должен быть левосторонним значением??? и как его записать на процедуру кнопки в форме? заранее спасибо
Странно думал такая форма записи сойдет))) вот развернутый вариант:

C++
1
for (long i=3; i<100000000; i+=2) {a[i+1]=false; a[i]=true;}
А насчет формы то если вы делаете например в VisualStudio то просто открываете форму, тащите на форму кнопку и элемент вывода(Честно не помню какие там, так как использую Qt Designer) На кнопку нажимаете дважды и вас должно перевести в редактор кода где создастся автоматически заглушка функции. Туда вставляете этот код, единственное в коде нужно исправить, сделать не вывод в консоль а на элемент вывода, тут уже Tutorial вам в помощь.
1
1 / 1 / 0
Регистрация: 22.10.2013
Сообщений: 68
11.02.2014, 10:12  [ТС]
спасибо за помощь но данная программа не вычисляеть только простые числа, а мне нужны только и только простые числа от 2 до n, моя программа верна но у меня не хватает знании в программировании чтобы переделать его
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
11.02.2014, 10:14
Вывести простые числа от 1 до 1000000 с помощью решета Эратосфена
0
1 / 1 / 0
Регистрация: 22.10.2013
Сообщений: 68
11.02.2014, 10:19  [ТС]
SatanaXIII, там нет полезной для меня информации
0
55 / 48 / 13
Регистрация: 31.10.2013
Сообщений: 166
11.02.2014, 10:35
Понятное дело не вычисляет, тут сыграла шутку моя невнимательность)) что прошу прощения:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# include <iostream>
 using namespace std;
 bool a[100000000];
 
int main()
{ 
    a[0]=a[1]=a[2]=true;
    for (long i=3; i<100000000; i+=2) {a[i+1]=false; a[i]=true;}
    for(long i=3; i<100000000; i+=2)
    {
            if(a[i]==true)
            {
               for (long j=i*2; j<100000000;j+=i*2)  a[j]=false;
            }
    } 
    for(long i=2; i<100000000; ++i)
    {
            if(a[i]==true)
            cout <<i<<" ";
    }
    system("pause");
}
0
1 / 1 / 0
Регистрация: 22.10.2013
Сообщений: 68
11.02.2014, 10:42  [ТС]
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
# include <iostream>
 using namespace std;
 bool a[100000000];
 
int main()
{ 
    a[0]=true;
    a[1]=true; 
    for(long long i=2; i<=100000000; ++i)
    {
            if(a[i]==false)
            {
                           if(i*i<=100000000)
                           {
                                          for(long long j=i*i; j<=100000000; j+=i)
                                          {
                                                   a[j]=true;
                                          }
                           }
            }
    } 
    for(long long i=1; i<=100000000; ++i)
    {
            if(a[i]==false)
            cout <<i<<" ";
    }
    system("pause");
все таки эта программка правильно работает,помогите ее переделать так чтобы наше заветное чисбо вводилось вручную)))

Добавлено через 1 минуту
ShadowFirst, спасибо вам за отзывчевость, ведь именно снеравнодушными людьми мир прекраснее))))
0
55 / 48 / 13
Регистрация: 31.10.2013
Сообщений: 166
11.02.2014, 10:47
Эх что тут можно сказать вот проверенная версия

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# include <iostream>
 using namespace std;
bool a[100000000];
 
int main()
{
     
    a[0]=a[1]=a[2]=true;
    for (long i=3; i<100000000; i+=2) {a[i+1]=false; a[i]=true;}
    for(long i=3; i<100000000; i+=2)
    {
            if(a[i]==true)
            {
               for (long j=i*i; j<100000000;j+=i*2)
                   a[j]=false;
            }
    }
    for(long i=2; i<100000000; ++i)
    {
            if(a[i]==true)
            cout <<i<<"\n";
    }
}
0
1 / 1 / 0
Регистрация: 22.10.2013
Сообщений: 68
11.02.2014, 10:50  [ТС]
кажется вы меня не совсем так поняли
0
55 / 48 / 13
Регистрация: 31.10.2013
Сообщений: 166
11.02.2014, 10:54
Лучший ответ Сообщение было отмечено Жасулан как решение

Решение

Я вас понял, но не хочется же выглядеть дураком, если пытаешься помочь, то помогай, а я получается вам пичкал действительно не рабочий код, и мое самолюбие при этом пострадало, вот и решил довести дело до конца представить то что работает, единственно может с типом ошибся так как там идет умножение i*i и нужно вернуть long long.
1
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 867
Записей в блоге: 1
11.02.2014, 11:51
Цитата Сообщение от Жасулан Посмотреть сообщение
кажется вы меня не совсем так поняли
Ну взять код из main и засунуть в процедуру нажатия кнопки, например код ShadowFirst, ...
только заменить
Цитата Сообщение от ShadowFirst Посмотреть сообщение
C++
1
cout <<i<<"\n";
например на вывод в textbox1:
C++
1
textbox1->Text+=i.ToString()+"; ";
1
1 / 1 / 0
Регистрация: 22.10.2013
Сообщений: 68
11.02.2014, 12:14  [ТС]
мне это не совсем понятно

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


Добавлено через 37 секунд
может я вышлю проект и исхоник
0
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 867
Записей в блоге: 1
11.02.2014, 13:29
Цитата Сообщение от Жасулан Посмотреть сообщение
может я вышлю проект и исхоник
Давай, исправление выложу здесь, либо файл, либо кодом...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.02.2014, 13:29
Помогаю со студенческими работами здесь

Даны натуральные числа p и q. Получить все делители числа q, взаимно простые к p
Даны натуральные числа p и q. Получить все делители числа q , взаимно простые к p. помогите сделать на с++

Даны натуральные числа a,b(a<= Ь). Получить все простые числа р, удовлетворяющие неравенствам a<= р<= b.
Даны натуральные числа a,b(a&lt;= Ь). Получить все простые числа р, удовлетворяющие неравенствам a&lt;= р&lt;= b. Решите на С++. Буду очень...

Даны целые числа р и q. Получить все делители числа q, взаимно простые с р.
Даны целые числа р и q. Получить все делители числа q, взаимно простые с р. Решите на С++. Заранее спасибо!

Даны натуральные числа p и q. Получить все делители числа q, взаимно простые к p.
Даны натуральные числа p и q. Получить все делители числа q , взаимно простые к p.

Даны целые числа р и q. Получить все делители числа q, взаимно простые с р
Получить все делители числа q, взаимно простые с р.


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru