Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
 Аватар для Leningradeс
14 / 14 / 3
Регистрация: 03.03.2011
Сообщений: 435

Найти все простые числа, оптимизация кода

30.11.2018, 10:52. Показов 1981. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!
Написал такой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
 
using namespace std;
 
int main() {
    string sPrime = "2\n";
    for (int i = 2; i <= 1000000; i++) {
        int iCount = 0;
        for (int j = 2; j <= i; j++)
            if (i % j - 1)
                break;
            else
                iCount++;
        if (iCount)
            sPrime += to_string(i) + "\n";
        iCount = 0;
    }
    cout << sPrime;
}
Что можно подправить что бы сделать ещё быстрее.

Добавлено через 16 минут
Это не тот код... Перепутал, попозже напишу.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.11.2018, 10:52
Ответы с готовыми решениями:

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

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

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

28
 Аватар для Leningradeс
14 / 14 / 3
Регистрация: 03.03.2011
Сообщений: 435
30.11.2018, 12:30  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от alkl Посмотреть сообщение
А чем Вы измеряете ?
Цитата Сообщение от n1b1ru Посмотреть сообщение
И что за среда у вас?
Visual Studio 17 Community

Цитата Сообщение от n1b1ru Посмотреть сообщение
Зачем там нужен string?
уже не нужен

Вот самый быстрый вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
using namespace std;
 
const int SIZE = 1000000;
int arr[SIZE]{ 0 };
int i, j;
 
int main() {
    for (i = 3; i < SIZE; i += 2)
        if (!arr[i]) {
            for (j = 2 * i; j < SIZE; j += i)
                arr[j] = 1;
        }
}
0
 Аватар для Avaddon74
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
30.11.2018, 12:31
Leningradeс, Попробуйет сначала сами написать класс string с нуля и вы поймете многое
1
 Аватар для Leningradeс
14 / 14 / 3
Регистрация: 03.03.2011
Сообщений: 435
30.11.2018, 12:34  [ТС]
Цитата Сообщение от Avaddon74 Посмотреть сообщение
Попробуйет сначала сами написать класс string с нуля и вы поймете многое
Да спасибо, попробую)

И огромное всем спасибо за помощь)

Добавлено через 1 минуту
0 сек
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
using namespace std;
 
const int SIZE = 1000000;
int arr[SIZE]{ 0 };
int i, j;
 
int main() {
    for (i = 3; i < SIZE; i += 2)
        if (!arr[i]) {
            for (j = 2 * i; j < SIZE; j += i)
                arr[j] = 1;
        }
}
0
 Аватар для alkl
119 / 94 / 35
Регистрация: 18.12.2012
Сообщений: 654
30.11.2018, 12:38
Цитата Сообщение от Avaddon74 Посмотреть сообщение
Попробуйет сначала сами написать класс string с нуля и вы поймете многое
Кстати, обычно это первый "hello world" в изучении классов.

Цитата Сообщение от Leningradeс Посмотреть сообщение
И огромное всем спасибо за помощь)

Не по теме:

Спасибо принято выражать кнопкой "Спасибо" )

1
 Аватар для Leningradeс
14 / 14 / 3
Регистрация: 03.03.2011
Сообщений: 435
30.11.2018, 12:40  [ТС]
Цитата Сообщение от alkl Посмотреть сообщение
Кстати, обычно это первый "hello world" в изучении классов.
Я не понял, это как?
0
 Аватар для alkl
119 / 94 / 35
Регистрация: 18.12.2012
Сообщений: 654
30.11.2018, 12:43
Это к совету по созданию класса string с нуля. Самый распространённый класс для изучения.
Попробуйте это сделать. Как минимум, с примитивными операторами (+, =, +=). Многое, действительно, поймёте.
0
261 / 111 / 53
Регистрация: 22.01.2017
Сообщений: 448
30.11.2018, 14:16
Leningradeс, вами предоставленный алгоритм не совсем корректен, нарушается алгоритм.
Разве что только для вывода и то предварительно надо выводить 2-ку потому что у вас цикл рассматривает только нечетные числа.
1
 Аватар для Leningradeс
14 / 14 / 3
Регистрация: 03.03.2011
Сообщений: 435
30.11.2018, 15:12  [ТС]
Цитата Сообщение от n1b1ru Посмотреть сообщение
вами предоставленный алгоритм не совсем корректен, нарушается алгоритм.
ага, вот так вроде правильно
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
 
using namespace std;
 
const int SIZE = 100;
int arr[SIZE]{ 0 };
int i, j;
 
int main() {
    string sPrime;
    for (i = 2; i < SIZE; ++i)
        if (!arr[i]) {
            sPrime += to_string(i) + "\n";
            for (j = 2 * i; j < SIZE; j += i)
                arr[j] = 1;
        }
    cout << sPrime;
}
Добавлено через 1 минуту
и вот так
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
#include <iostream>
#include <string>
 
using namespace std;
 
int main() {
    string sPrime;
    bool bCount = true;
 
    for (int i = 1; i <= 100; i += 2) {
 
        for (int j = 2; j <= sqrt(double(i)); j++)
            if (!(i % j)) {
                bCount = false;
                break;
            }
 
        if (bCount)
            sPrime += to_string(i) + "\n";
 
        bCount = true;
    }
 
    cout << sPrime;
}
Добавлено через 8 минут
По скорости одинаково 0,02 сек

Добавлено через 23 секунды
Без стринга и без вывода

Добавлено через 1 минуту
На 100 элементах

Добавлено через 2 минуты
На 1 000 000 элементах
1. 0,02 сек
2. 1,10 сек
0
261 / 111 / 53
Регистрация: 22.01.2017
Сообщений: 448
30.11.2018, 15:16
Цитата Сообщение от Leningradeс Посмотреть сообщение
На 1 000 000 элементах
1. 0,02 сек
2. 1,10 сек
Так и будет. Первый алгоритм занимает больше места в памяти, а второй выполняет больше операций.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.11.2018, 15:16

Найти все простые числа меньшие заданного числа
Помогите Пожалуйста! Простое число это число которое делится только на 1 и на самого себя. Пользователь вводит число n и...

Для заданного натурального числа найти все числа меньше его и взаимно простые с ним
Помогите написать код: для заданного с клавиатуры натурального числа N найти все числа меньше его и взаимно простые (не имеют общих...

Перебором делителей найти простые числа в указанном диапазоне, и вывести все простые числа в поле Memo
Мне нужна программка на Delphi, которая простым перебором делителей находит простые числа в указанном диапазоне и выводит все простые числа...

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

Найти все простые числа, меньше данного числа N. Определение простого числа описать в функции
Найти все простые числа, меньше данного числа N. Определение простого числа описать в функции


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

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
После закрытия оутлука продолжает висеть процесс в диспетчере задач
Maks 27.10.2026
С недавнего времени в продакшене возникла проблема: при закрытии оутлука в диспетчере задач продолжал висеть процесс outlook. exe. Проблема возникла после установки MS Office 2021 LTSC на машинах, под. . .
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него. https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952 Инструкция внутри. https:/ / youtu. be/ VpfFZSUDGnQ. . .
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru