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

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

Восстановить пароль Регистрация
 
 
Maxim09
 Аватар для Maxim09
0 / 0 / 0
Регистрация: 23.08.2015
Сообщений: 209
24.07.2016, 14:20     Программа нахождения простых чисел #1
Я написал программу но в ней ошибка! Не пойму какая! Но мне важно понять как исправить именно эту прогу, знаю что есть другие проги на эту тему.


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");
}
Программа нахождения простых чисел!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Serg_o_Grey
46 / 46 / 19
Регистрация: 29.03.2016
Сообщений: 260
24.07.2016, 14:54     Программа нахождения простых чисел #2
123
Maxim09
 Аватар для Maxim09
0 / 0 / 0
Регистрация: 23.08.2015
Сообщений: 209
24.07.2016, 14:59  [ТС]     Программа нахождения простых чисел #3
Выдало 1.3.5.7.9.
по моему что-то не то!
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
Maxim09
 Аватар для Maxim09
0 / 0 / 0
Регистрация: 23.08.2015
Сообщений: 209
24.07.2016, 15:00  [ТС]     Программа нахождения простых чисел #5
Нету 2-ки и 9 делится не только на себя и 1, а ещё и на 3 ведь!
Unknownx
24.07.2016, 15:00
  #6

Не по теме:

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

Serg_o_Grey
46 / 46 / 19
Регистрация: 29.03.2016
Сообщений: 260
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;
}
Maxim09
 Аватар для Maxim09
0 / 0 / 0
Регистрация: 23.08.2015
Сообщений: 209
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.
SerVal
 Аватар для SerVal
17 / 17 / 2
Регистрация: 16.04.2015
Сообщений: 166
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 << " ";
    }
}
По крайней мере, понятно, что делается.
Serg_o_Grey
46 / 46 / 19
Регистрация: 29.03.2016
Сообщений: 260
24.07.2016, 15:30     Программа нахождения простых чисел #10
Цитата Сообщение от Maxim09 Посмотреть сообщение
Опять не то
Цитата Сообщение от Maxim09 Посмотреть сообщение
Выдаёт 3.5.7.
все то. 1 и 2 дописать самостоятельно можно. кроме того число 2 является единственным четным в ряде простых чисел, что наводит на мысль - "а стоит ли его воспринимать как простое?"
1 - делится на любое число, что мне, лично тоже не нравится (это скорее фундаментальное число, которое как простое тоже воспринимать не имеет смысла)
Практической пользы в них нет
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
- никак не могу понять, как имея корректный код мучатся и далее, лан видимо я что то не понимаю в жизни...
Maxim09
 Аватар для Maxim09
0 / 0 / 0
Регистрация: 23.08.2015
Сообщений: 209
24.07.2016, 15:39  [ТС]     Программа нахождения простых чисел #12
Unknownx,
Ваш алгоритм я понял и благодарен вам за помощь!
А вот алгоритм другого товарища Serg_o_Grey, не совсем вот и колупаю маленько

Добавлено через 1 минуту
Только вот не пойму а какое действие делает вот эта часть кода:
C++
1
j && f == 0
shilko2013
 Аватар для shilko2013
237 / 214 / 115
Регистрация: 02.04.2016
Сообщений: 812
Завершенные тесты: 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;
}
SerVal
 Аватар для SerVal
17 / 17 / 2
Регистрация: 16.04.2015
Сообщений: 166
24.07.2016, 15:40     Программа нахождения простых чисел #14
Цитата Сообщение от Unknownx Посмотреть сообщение
Чисто для себя узнать, мой корректный алгоритм нарочно игнорируется?
Алгоритм - это когда всё понятно. А у Вас - непонятно!
Вывод на экран это часть алгоритма?
Serg_o_Grey
46 / 46 / 19
Регистрация: 29.03.2016
Сообщений: 260
24.07.2016, 15:45     Программа нахождения простых чисел #15
Maxim09, в алгоритме товарища Unknownx, лишние действия выполняются, а именно проверка четных чисел, что не рационально, но тем не менее правильно
SerVal
 Аватар для SerVal
17 / 17 / 2
Регистрация: 16.04.2015
Сообщений: 166
24.07.2016, 15:45     Программа нахождения простых чисел #16
Цитата Сообщение от shilko2013 Посмотреть сообщение
Вообще-то есть решето Эратосфена
У него только один недостаток - оно не распараллеливается.
То есть, от 4-х ядер процессора - никакого толку. Правда, Эратосфен в этом не виноват.
Unknownx
Заблокирован
24.07.2016, 15:50     Программа нахождения простых чисел #17
Цитата Сообщение от SerVal Посмотреть сообщение
Алгоритм - это когда всё понятно. А у Вас - непонятно!
- а ну тогда раз дело в этом, то что есть простое число - это число которое делится только на себя, т.е на 1-цу и на самого себя

Возьмём к примеру числа 7-мь и 8-мь и пройдёмся по всем возможным делителям

Цитата Сообщение от Maxim09 Посмотреть сообщение
if *(j%i == 0 )
- если кто забыл это остаток от целочисленного деления т.е пока число делится с остатком мы идём дальше, как только поделилось нацело то стопорим алгоритм
итак 7-ка
7 % 2 остаток 1
7 % 3 есть остаток 1
7 % 4 есть остаток 3
7 % 5 есть остаток 2
7 % 6 есть остаток 1
итак весь цикл чисел от 2-ки до 7-ки не дал ни одного целого делителя, значит у числа просто нет дургих делителей кроме как 1 и само число

Теперь 8-ка
8 % 2 == 0 ага остаток 0 - останавливаем цикл и не печатаем число(под условием if( f == 0 ) можно записать добавление в вектор и всё что угодно, я просто ограничился печатанием простых чисел)

Добавлено через 3 минуты
Касательно 1-цы и двойки, с ними цикл по i просто не начинается, надеюсь теперь всё понятно
Serg_o_Grey
46 / 46 / 19
Регистрация: 29.03.2016
Сообщений: 260
24.07.2016, 15:52     Программа нахождения простых чисел #18
Цитата Сообщение от shilko2013 Посмотреть сообщение
Вообще-то есть решето Эратосфена
задача была поставлена именно данный автором код подправить

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

Не по теме:


Цитата Сообщение от Unknownx Посмотреть сообщение
Цитата Сообщение от SerVal Посмотреть сообщение
Алгоритм - это когда всё понятно. А у Вас - непонятно!
Unknownx, с товарищем SerVal, в другой теме встречался, он не очень-то сильно понимает...

SerVal
 Аватар для SerVal
17 / 17 / 2
Регистрация: 16.04.2015
Сообщений: 166
24.07.2016, 15:56     Программа нахождения простых чисел #19
Во-первых, непонятно, какое отношение к алгоритму имеет функция main?

Цитата Сообщение от Unknownx Посмотреть сообщение
Теперь 8-ка
8 % 2 == 0 ага остаток 0
На двойку-то зачем делить??? В самом начале надо
C++
1
if ((candidate & 1) == 0) return false; // число чётное
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.07.2016, 16:01     Программа нахождения простых чисел
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Serg_o_Grey
46 / 46 / 19
Регистрация: 29.03.2016
Сообщений: 260
24.07.2016, 16:01     Программа нахождения простых чисел #20
Цитата Сообщение от SerVal Посмотреть сообщение
Зачем делить-то???
C++
Выделить код
1
if ((candidate & 1) == 0) return false; // число чётное
if ((15 & 1) == 0) return false; // число нечетное
и что?
Yandex
Объявления
24.07.2016, 16:01     Программа нахождения простых чисел
Ответ Создать тему
Опции темы

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