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

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

Войти
Регистрация
Восстановить пароль
 
Xerotico
0 / 0 / 0
Регистрация: 25.01.2014
Сообщений: 14
#1

Поиск простых чисел - C++

21.04.2014, 02:58. Просмотров 698. Ответов 3
Метки нет (Все метки)

Знаю, что тема избитая, но решил написать алгоритм поиска простых чисел.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int j,i,k /*количество простых*/                ,nech,prime[1000];
bool a;
k=1;  nech=3;  prime[1]=2;// Одно простое число - 2, первое нечётное - 3
for(j=1;j<1000;j++){ // Смотрим 1000 нечётных чисел
        for(i=1;i<=k;i++){  // Смотрим столько раз, сколько простых чисел в массиве
                if(nech%prime[i]==0){ // Если нечётное число делится на простое число без остатка
                        a=true;     } // Делаем а положительным
                         }
        if(a==true)                   // Если а положительное, т.е нечётное число составное
        {nech=nech+2;}                // Смотрим следующее нечётное число
        else {cout<<nech<<",  "; k=k+1; prime[k]=nech; nech=nech+2;} //А если простое, то занесём его в массив простых чисел и посмотрим на следующее нечётное число число
                         }
 
                          Sleep(3000);
 
}
Выводит лишь 3 первых простых числа, хотя должна перебрать 1000 нечётных чисел.
Прошу помощи нахождения ошибки в моём коде.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.04.2014, 02:58     Поиск простых чисел
Посмотрите здесь:

C++ Поиск простых чисел
C++ Поиск простых чисел в массиве
Поиск простых чисел и формирование из них массива C++
Конкурс(поиск простых чисел) C++
C++ Поиск простых чисел
Поиск простых чисел C++
C++ Поиск простых чисел
Поиск простых чисел C++
Поиск простых чисел C++
C++ Поиск всех простых чисел в заданном диапазоне
C++ Поиск простых чисел и сохранение их в массив
C++ поиск простых чисел

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Чумаков Антон
85 / 67 / 17
Регистрация: 07.03.2011
Сообщений: 168
21.04.2014, 03:06     Поиск простых чисел #2
А чем вам решето Эратосфена не нравится?
LVV
57 / 57 / 4
Регистрация: 15.02.2010
Сообщений: 245
21.04.2014, 15:41     Поиск простых чисел #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Решето Эратосфена: если натуральное число не делится ни на какие простые числа меньшие за него, то оно само является простым.
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
32
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int N;
cin >> N; //количество простых чисел
 int *M = new int [N];//создание динамического массива 
M[0]=2;//2 - первое простое число, занесённое в массив
int p=3;//p- очередное число, проверяемое на "простоту"
int n;//n- индекс последнего простого числа в массиве
for (n=1; n<N; n++)
{
a:     for (int i = 0; i<=n; i++)//для каждого элемента массива простых чисел...
       {
             if (M[i]<=p/2 && p%M[i]==0) //(делитель не может быть больше половины числа р) если p-не простое 
             {
                    p++;//то переходим к следующему числу
                    goto a;//и заново проверяем его на делимость на все найденные простые
             }
       }
//из цикла помеченного как а: выйдет в любом слуае после нахождения очередного простого р    
M[n]=p;//записываем найденное простое в массив
p++;//переходим к очередному числу для проверки на "простоту"
}
//вывод массива простых чисел
for (int i = 0; i<N; i++) 
   cout << M[i] << " ";
 delete [] M; //освобождаем память занятую под динамический массив
 system ("pause");
 return 0;
 }
Xerotico
0 / 0 / 0
Регистрация: 25.01.2014
Сообщений: 14
21.04.2014, 15:56  [ТС]     Поиск простых чисел #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int j,i,k /*количество простых*/                ,nech,prime[1000];
for(j=1;j<1000;j++)
prime[j]=0;
bool a;
k=1;  nech=3;  prime[1]=2;// Одно простое число - 2, первое нечётное - 3
for(j=1;j<1000;j++){ // Смотрим 1000 нечётных чисел
        for(i=1;i<=k;i++){  // Смотрим столько раз, сколько простых чисел в массиве
                if(nech%prime[i]==0){ // Если нечётное число делится на простое число без остатка
                        a=true;     } // Делаем а положительным
                         }
        if(a==true)                   // Если а положительное, т.е нечётное число составное
        {nech=nech+2; [B]a=false;[/B]}                // Смотрим следующее нечётное число
        else {cout<<nech<<'\n'; k=k+1; prime[k]=nech; nech=nech+2; [B]a= false[/B];} //А если простое, то занесём его в массив простых чисел и посмотрим на следующее нечётное число число
                         }
 
Sleep(10000);
Ошибка найдена, всем спасибо за участие.
Yandex
Объявления
21.04.2014, 15:56     Поиск простых чисел
Ответ Создать тему
Опции темы

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