Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Жасулан
1 / 1 / 0
Регистрация: 22.10.2013
Сообщений: 68
#1

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

10.02.2014, 07:31. Просмотров 1058. Ответов 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)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.02.2014, 07:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вычислить все простые числа до n (C++):

Задача про простые числа. Выпишите все простые числа, находящиеся в интервале между а и б - C++
#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...

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

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

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

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

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

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

Добавлено через 48 секунд
хотя 2-2000 только 2 четное))
0
druidich
30 / 30 / 4
Регистрация: 21.05.2012
Сообщений: 440
11.02.2014, 09:28 #6
Жасулан,
Цитата Сообщение от Жасулан Посмотреть сообщение
нет этот вариант исключен, потому что в больших простых числах может встретиться четное простое число
как так? если оно четное то оно уже не простое ! ну или приведите пример
разумней делать проверку на четность, т.е. не просто делить число на 2, а взять последнюю цифру числа и поделить ее на 2. Затем проверить на деление на 3 (сумма цифр числа делиться на 3 => не простое).
0
ShadowFirst
55 / 48 / 1
Регистрация: 31.10.2013
Сообщений: 161
11.02.2014, 09:39 #7
Вот именно два четное, но никто не говорит что нельзя пропускать дальше. Начинать например сразу с нечетных чисел, в частности с 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  [ТС] #8
for (long i=3; i<100000000; i+=2) a[i+1]=!a[i]=true; выдает ошибку error C2106: =: левый операнд должен быть левосторонним значением??? и как его записать на процедуру кнопки в форме? заранее спасибо
0
ShadowFirst
55 / 48 / 1
Регистрация: 31.10.2013
Сообщений: 161
11.02.2014, 10:04 #9
Цитата Сообщение от Жасулан Посмотреть сообщение
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  [ТС] #10
спасибо за помощь но данная программа не вычисляеть только простые числа, а мне нужны только и только простые числа от 2 до n, моя программа верна но у меня не хватает знании в программировании чтобы переделать его
0
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,529
Завершенные тесты: 1
11.02.2014, 10:14 #11
Вывести простые числа от 1 до 1000000 с помощью решета Эратосфена
0
Жасулан
1 / 1 / 0
Регистрация: 22.10.2013
Сообщений: 68
11.02.2014, 10:19  [ТС] #12
SatanaXIII, там нет полезной для меня информации
0
ShadowFirst
55 / 48 / 1
Регистрация: 31.10.2013
Сообщений: 161
11.02.2014, 10:35 #13
Понятное дело не вычисляет, тут сыграла шутку моя невнимательность)) что прошу прощения:
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  [ТС] #14
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
ShadowFirst
55 / 48 / 1
Регистрация: 31.10.2013
Сообщений: 161
11.02.2014, 10:47 #15
Эх что тут можно сказать вот проверенная версия

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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.02.2014, 10:47
Привет! Вот еще темы с ответами:

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

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

Найти все натуральные числа, меньшие заданного числа и взаимно простые с ним - C++
Дано натуральное число n. Необходимо получить все натуральные числа, меньшие nn и взаимно простые с ним (два натуральных числа называются...

Дано натуральное число. Вывести на экран все простые числа до заданного числа. - C++
Дано натуральное число. Вывести на экран все простые числа до заданного числа.


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
11.02.2014, 10:47
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru