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

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

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

Программа нахождения простых чисел - C++

24.07.2016, 14:20. Просмотров 1888. Ответов 25
Метки нет (Все метки)

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


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<iostream>
#include <iomanip>
using namespace std;
void main()
{
    int f=0;
    int n=10;
    for (int j=1; j < 10; j++)
    {
        for(int i=1; i<=j/i; i++) 
            if( n%j == 0 ) 
            {
                f=1; break;             
            }
        if(f == 1)  cout<<j<<setw(3);
        f=0;
    }
    cout<<endl;
    system("pause");
}
Программа нахождения простых чисел!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.07.2016, 14:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Программа нахождения простых чисел (C++):

Алгоритм нахождения простых чисел - C++
Вопросы: 1) Нужен алгоритм проверки числа (является ли число простим). Нужно чтобы алгоритм был быстрым (нужно проделать 104 операций за...

Алгоритм нахождения простых чисел - C++
Не так давно начал изучать с++. Вот попытался написать программу которая вычисляет простое ли число которые вы ввели в консоль? но она...

Алгоритм нахождения простых чисел - C++
Не могу найти в интернете нормальный код алгоритма нахождения простых чисел. Помогите пожалуйста. Добавлено через 2 минуты ...

Нахождения больших простых чисел - C++
Нахождения больших простых чисел. Реализовать программу на C++. спасибо за помощь

Алгоритм нахождения ПРОСТЫХ чисел в файле - C++
Заполнить файл f целыми числами, полученными с помощью генератора случайных чисел. Из файла f получить файл g, оставив только ПРОСТЫЕ...

Написать программу нахождения первых 50 простых чисел - C++
Написать программу нахождения первых 50 простых чисел...Помогите пожалустно если можно то с коментариями!!

25
Serg_o_Grey
76 / 76 / 27
Регистрация: 29.03.2016
Сообщений: 348
24.07.2016, 14:54 #2
123
0
Maxim09
0 / 0 / 0
Регистрация: 23.08.2015
Сообщений: 422
24.07.2016, 14:59  [ТС] #3
Выдало 1.3.5.7.9.
по моему что-то не то!
0
Unknownx
Заблокирован
24.07.2016, 14:59 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
#include<iostream>
#include <iomanip>
using namespace std;
int main()
{
    int f = 0;
    for (int j = 1; j <= 10; j++)
    {
        f = 0;
        for(int i = 2; i < j && f == 0; i++) 
        {
            if( j % i == 0 ) 
            {
                f = 1;  
                break;       
            }
        }
        if(f == 0)  
            cout<<j<<setw(3);
    }
    cout<<endl;
    cin.get();
    return 0;
}
http://codepad.org/sGec7kGQ
1 2 3 5 7
1
Maxim09
0 / 0 / 0
Регистрация: 23.08.2015
Сообщений: 422
24.07.2016, 15:00  [ТС] #5
Нету 2-ки и 9 делится не только на себя и 1, а ещё и на 3 ведь!
0
Unknownx
24.07.2016, 15:00
  #6

Не по теме:

Цитата Сообщение от Maxim09 Посмотреть сообщение
9.
- конечно не то, у тебя сама проверка неверная, почему ты делишь 10-ку а не находишь остаток от деления числа на число?

0
Serg_o_Grey
76 / 76 / 27
Регистрация: 29.03.2016
Сообщений: 348
24.07.2016, 15:00 #7
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
исправился
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 f=0;
    //int n=10;
    for (int j=1; j < 10; j=j+2)
    {
        f=0;
        for(int i=3; i<=j; i=i+2)
        {
            if  (j%i == 0 )
            {
                if(j == i)
                {
                    f=1;
                }
                else 
                {
                    f=0;
                    break;
                }
            }
        }
        if(f == 1)  cout<<j<<setw(3);
    }
    cout<<endl;
    system("pause");
    return 0;
}
1
Maxim09
0 / 0 / 0
Регистрация: 23.08.2015
Сообщений: 422
24.07.2016, 15:18  [ТС] #8
10-ую строку не пойму

Добавлено через 4 минуты
Поясните мне 10 строку а-то не дошло как-то !
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
#include<iostream>
#include <iomanip>
using namespace std;
int main()
{
    int f = 0;
    for (int j = 1; j <= 10; j++)
    {
        f = 0;
        for(int i = 2; i < j && f == 0; i++) 
        {
            if( j % i == 0 ) 
            {
                f = 1;  
                break;       
            }
        }
        if(f == 0)  
            cout<<j<<setw(3);
    }
    cout<<endl;
    cin.get();
    return 0;
}
Добавлено через 46 секунд
А именно
C++
1
j && f == 0
!!!

Добавлено через 10 минут
Опять не то
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 f=0;
    //int n=10;
    for (int j=1; j < 10; j=j+2)
    {
        f=0;
        for(int i=3; i<=j; i=i+2)
        {
            if  (j%i == 0 )
            {
                if(j == i)
                {
                    f=1;
                }
                else 
                {
                    f=0;
                    break;
                }
            }
        }
        if(f == 1)  cout<<j<<setw(3);
    }
    cout<<endl;
    system("pause");
    return 0;
}
Добавлено через 34 секунды
Выдаёт 3.5.7.
0
SerVal
23 / 23 / 2
Регистрация: 16.04.2015
Сообщений: 208
24.07.2016, 15:18 #9
Не правильно вы ребятки пишете.

Лучше вот как:
Пишем функцию, которая возвращает ответ - простое это число или нет:

C++
1
2
3
4
5
bool isPrime(unsigned int candidate)
{
      //если кандидат простое число return true;
      //return  false;
}
А потом main :
C++
1
2
3
4
5
6
7
8
int main()
{
    for (int i = 0; i< 10; i++)
    {
           if (isPrime(i))
        std::cout << i << " ";
    }
}
По крайней мере, понятно, что делается.
1
Serg_o_Grey
76 / 76 / 27
Регистрация: 29.03.2016
Сообщений: 348
24.07.2016, 15:30 #10
Цитата Сообщение от Maxim09 Посмотреть сообщение
Опять не то
Цитата Сообщение от Maxim09 Посмотреть сообщение
Выдаёт 3.5.7.
все то. 1 и 2 дописать самостоятельно можно. кроме того число 2 является единственным четным в ряде простых чисел, что наводит на мысль - "а стоит ли его воспринимать как простое?"
1 - делится на любое число, что мне, лично тоже не нравится (это скорее фундаментальное число, которое как простое тоже воспринимать не имеет смысла)
Практической пользы в них нет
0
Unknownx
Заблокирован
24.07.2016, 15:34 #11
Чисто для себя узнать, мой корректный алгоритм нарочно игнорируется?
Кликните здесь для просмотра всего текста
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
#include<iostream>
#include <iomanip>
using namespace std;
int main()
{
    int f = 0;
    for (int j = 1; j <= 100; j++)
    {
        f = 0;
        for(int i = 2; i < j && f == 0; i++) 
        {
            if( j % i == 0 ) 
            {
                f = 1;  
                break;       
            }
        }
        if(f == 0)  
            cout<<j<<setw(3);
    }
    cout<<endl;
    cin.get();
    return 0;
}

http://codepad.org/awxC15H7 ?
1 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
- никак не могу понять, как имея корректный код мучатся и далее, лан видимо я что то не понимаю в жизни...
0
Maxim09
0 / 0 / 0
Регистрация: 23.08.2015
Сообщений: 422
24.07.2016, 15:39  [ТС] #12
Unknownx,
Ваш алгоритм я понял и благодарен вам за помощь!
А вот алгоритм другого товарища Serg_o_Grey, не совсем вот и колупаю маленько

Добавлено через 1 минуту
Только вот не пойму а какое действие делает вот эта часть кода:
C++
1
j && f == 0
0
shilko2013
244 / 221 / 118
Регистрация: 02.04.2016
Сообщений: 855
Завершенные тесты: 1
24.07.2016, 15:40 #13
Вообще-то есть решето Эратосфена
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
#include <iomanip> // содержится прототип манипулятора setw()
using namespace std;
 
int main(int argc, char* argv[])
{
    setlocale(LC_ALL, "rus");
    int n; // правая граница интервала
    cout << "Введите число - N: ";
    cin >> n;
 
    int size_array = n - 2; // так как первое простое число - это 2, то размер массива уменьшаем на 2, так как 0 и 1 не в счёт     
    int *arrayPtr = new int [size_array]; // создаём одномерный динамический массив размером n - 2
 
    for(int counter = 0; counter <= size_array; counter++)
    {
        arrayPtr[counter] = counter + 2; // записываем в массив все числа в интервале [2;n]
    }
    int p = 2; // первое простое число
    int index = 0; // переменная  для прохода по элементам массива
 
    // в цикле while реализовано решето Эратосфена
    while (p < n) // пока значение переменной p меньше введённого n
    {
        // в цикле for отсеиваем составные числа
        for (int counter = p*p - 2; counter <= size_array; counter += p)
        {
            arrayPtr[counter] = -1; // на места составных чисел присваиваем значение -1
        }
 
        // в цикле while изменяем значение переменной p
        while (arrayPtr[index] <= p ) // пока значение из массива чисел меньше либо равно значению переменной p
        {
            index++; // переключаться на следующий элемент массива
        }
        p = arrayPtr[index]; // нужное значение массива найдено, поэтому присваиваем его переменной p
    } // конец алгоритма Эратосфена
 
    // вывод на экран простых чисел
    for(int counter = 0; counter <= n - 2; counter++)
    {
        if (arrayPtr[counter] != -1) // если элемент массива не равен -1
        cout << setw(2) << arrayPtr[counter] << " "; // сделать вывод на экран
    }
 
    cout << endl;
    system("pause");
    return 0;
}
1
SerVal
23 / 23 / 2
Регистрация: 16.04.2015
Сообщений: 208
24.07.2016, 15:40 #14
Цитата Сообщение от Unknownx Посмотреть сообщение
Чисто для себя узнать, мой корректный алгоритм нарочно игнорируется?
Алгоритм - это когда всё понятно. А у Вас - непонятно!
Вывод на экран это часть алгоритма?
0
Serg_o_Grey
76 / 76 / 27
Регистрация: 29.03.2016
Сообщений: 348
24.07.2016, 15:45 #15
Maxim09, в алгоритме товарища Unknownx, лишние действия выполняются, а именно проверка четных чисел, что не рационально, но тем не менее правильно
1
24.07.2016, 15:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.07.2016, 15:45
Привет! Вот еще темы с ответами:

Напишите программу нахождения всех трехзначных простых чисел - C++
Найти все трехзначные простые числа

Программа поиска простых чисел - C++
Необходимо написать программу для поиска простых чесил в интервале от 1 до 100 на языке СИ.Простое число — это натуральное число, имеющее...

Программа нахождения совершенных чисел - C++
Нужно написать программу которая выводит совершенные числа...

Почему программа поиска простых чисел работает только до 61? - C++
Добрый день, Помогите, пожалуйста, разобраться. Программа для поиска простых чисел. На экран отображает только простые числа до 61, ...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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