Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
14 / 14 / 3
Регистрация: 03.03.2011
Сообщений: 435
1

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

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

Author24 — интернет-сервис помощи студентам
Добрый день!
Написал такой код:
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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
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;...

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

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

28
14 / 14 / 3
Регистрация: 03.03.2011
Сообщений: 435
30.11.2018, 12:30  [ТС] 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от 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
571 / 353 / 133
Регистрация: 15.09.2017
Сообщений: 1,239
30.11.2018, 12:31 22
Leningradeс, Попробуйет сначала сами написать класс string с нуля и вы поймете многое
1
14 / 14 / 3
Регистрация: 03.03.2011
Сообщений: 435
30.11.2018, 12:34  [ТС] 23
Цитата Сообщение от 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
119 / 94 / 35
Регистрация: 18.12.2012
Сообщений: 654
30.11.2018, 12:38 24
Цитата Сообщение от Avaddon74 Посмотреть сообщение
Попробуйет сначала сами написать класс string с нуля и вы поймете многое
Кстати, обычно это первый "hello world" в изучении классов.

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

Не по теме:

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

1
14 / 14 / 3
Регистрация: 03.03.2011
Сообщений: 435
30.11.2018, 12:40  [ТС] 25
Цитата Сообщение от alkl Посмотреть сообщение
Кстати, обычно это первый "hello world" в изучении классов.
Я не понял, это как?
0
119 / 94 / 35
Регистрация: 18.12.2012
Сообщений: 654
30.11.2018, 12:43 26
Это к совету по созданию класса string с нуля. Самый распространённый класс для изучения.
Попробуйте это сделать. Как минимум, с примитивными операторами (+, =, +=). Многое, действительно, поймёте.
0
261 / 111 / 53
Регистрация: 22.01.2017
Сообщений: 448
30.11.2018, 14:16 27
Leningradeс, вами предоставленный алгоритм не совсем корректен, нарушается алгоритм.
Разве что только для вывода и то предварительно надо выводить 2-ку потому что у вас цикл рассматривает только нечетные числа.
1
14 / 14 / 3
Регистрация: 03.03.2011
Сообщений: 435
30.11.2018, 15:12  [ТС] 28
Цитата Сообщение от 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 29
Цитата Сообщение от Leningradeс Посмотреть сообщение
На 1 000 000 элементах
1. 0,02 сек
2. 1,10 сек
Так и будет. Первый алгоритм занимает больше места в памяти, а второй выполняет больше операций.
0
30.11.2018, 15:16
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.11.2018, 15:16
Помогаю со студенческими работами здесь

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

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

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

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


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

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