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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.92
randy92
7 / 7 / 2
Регистрация: 23.04.2014
Сообщений: 59
#1

Решето Эратосфена - C++

09.05.2014, 14:42. Просмотров 1526. Ответов 4
Метки нет (Все метки)

Простое число — это любое целое число, которое точно делится без остатка только само на себя и на 1. Решето Эратосфена — это способ нахождения простых чисел.

а) Создайте массив, все элементы которого имеют начальные значения 1 (истина). Элементы массива с простыми индексами останутся равными 1. Все другие элементы массива, в конечном счете, установятся равными нулю.

b) Начиная с индекса массива 2 (индекс 1 должен быть простым), каждый раз отыскивается элемент массива с единичным значением, циклически обрабатывается оставшаяся часть массива и устанавливается в нуль каждый элемент массива, чей индекс кратен индексу элемента с единичным значением. Для индекса 2 все элементы в массиве с большим чем 2 индексом и кратные 2 установятся равными нулю (индексы 4, 6, 8 и тому подобные); для индекса 3 все элементы с индексом свыше 3 и кратные 3, установятся равными нулю (индексы 6, 9, 12 и тому подобные) и т.д. Когда процесс закончится, элементы массива с единичным значением
указывают, что их индексы — простые числа. Эти индексы могут быть напечатаны.

Напишите программу, которая использует массив с 1000 элементами для определения и печати простых чисел между 1 и 999. Элемент 0 массива во внимание не принимайте.

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
int main()
{
    int arraySize = 101;        //пока возьмем 100 элементов для пробы
    int a[ arraySize ];   
    int j;
 
    for( int i = 0; i < arraySize; i++ )        //Установка всех эл.
    {                                             //  равными 1
        a[ i ] = 1;
    }
 
    for( int i = 2; i < arraySize; i++ )
    {
        j = i;
 
        for( j; j < arraySize; j++ )        //Если число простое - оставляем 1,
        {                                   //если нет - ставим 0.
            if( i % ( j + 1) == 0 )
                a[ j + 1 ] = 0;
            else                
                continue;
        }
    }
 
    for( int h = 1; h < arraySize; h++ )    //Вывод результата на экран
        cout << h << setw( 5 ) << a[ h ] << endl;
   return 0;
}
В результате появляется список индексов, которые все до единого равны "1". В чем ошибка?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2014, 14:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Решето Эратосфена (C++):

Решето Эратосфена - C++
Возможно ли найти простые числа методом решета Эратосфена с помощью вектора за один проход? Добавлено через 1 минуту У меня...

Решето Эратосфена - C++
Как можно реализовать? Подскажите плиз

Решето Эратосфена - C++
В решете эратосфена из книги в условии есть непонятная вещь: if (i * 1ll * i &lt;= n) - возле единицы для непонятных знака, на форуме они...

Решето Эратосфена - C++
Кому надо - программа &quot;Решето Эратосфена&quot; на C++. Записывает в файл 1 000 000 первых простых чисел за 1/10 секунды (без вывода)!!! ...

Решето Эратосфена - C++
Дано число N (2&lt;=N &lt;=10000), найдите и выведите простые числа между 2 и данным N. Простое число - число, которое может быть разделено...

Решето Эратосфена - C++
В общем задание посчитать количество простых чисел до заданного числа N. Написал такой алгоритм, работает только до 11 :cry: Уже час не...

4
_script_
169 / 137 / 34
Регистрация: 01.05.2012
Сообщений: 414
09.05.2014, 15:02 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
randy92,
так вот вроде правильно)
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
#include <iostream>
#include <iomanip>
using namespace std;
 
int main()
{
    int arraySize = 101;        //пока возьмем 100 элементов для пробы
    int a[ arraySize ];
    int j;
 
    for( int i = 0; i < arraySize; i++ )        //Установка всех эл.
    {                                             //  равными 1
        a[ i ] = 1;
    }
 
    for( int i = 2; i < arraySize; i++ )
    {
        j = i+1;
        for( j; j < arraySize; j++ )        //Если число простое - оставляем 1,
        {                                   //если нет - ставим 0.
            if( j%i == 0 )
                a[ j ] = 0;
            else
                continue;
        }
    }
 
    for( int h = 1; h < arraySize; h++ )    //Вывод результата на экран
        cout << h << setw( 5 ) << a[ h ] << endl;
   return 0;
}
Добавлено через 34 секунды
Не тот остаток проверяли)
0
randy92
7 / 7 / 2
Регистрация: 23.04.2014
Сообщений: 59
09.05.2014, 15:03  [ТС] #3
верно, спасибо) почему мой код не работал корректно?
0
lawr
366 / 260 / 124
Регистрация: 09.05.2014
Сообщений: 769
09.05.2014, 15:07 #4
if( ( j + 1)%i == 0 ) а не if( i%( j + 1) == 0 ). ты сравнивал неачальный индекс с последующими, в результате остаток от деления всегда не равен нулю- условие не выполняется.
0
_script_
169 / 137 / 34
Регистрация: 01.05.2012
Сообщений: 414
09.05.2014, 15:10 #5
Цитата Сообщение от randy92 Посмотреть сообщение
почему мой код не работал корректно?
я написал) ты не тот остаток находил) надо было местами поменять)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.05.2014, 15:10
Привет! Вот еще темы с ответами:

Решето Эратосфена - C++
Здравствуйте. Реализовал алгоритм &quot;Решето Эратосфена&quot; в виде класса. Взгляните, пожалуйста, и скажите, где я не прав. Спасибо. ...

Решето Эратосфена - C++
Подскажите реализацию (код) метода шифрования - решета Эратосфена, пожалуйста.

Решето Эратосфена - C++
Написать функция для выполнения алгоритма решить Эратосфена! зарания спасибо!!!

Решето Эратосфена - C++
Определить простые числа методом просеивания с помощью &lt;&lt;решета Эратосфена&gt;&gt; с _битовой упаковкой_ данных при сохранении. #include...


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

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

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