Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.83/163: Рейтинг темы: голосов - 163, средняя оценка - 4.83
 Аватар для Maxim09
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458

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

24.07.2016, 14:20. Показов 34691. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.07.2016, 14:20
Ответы с готовыми решениями:

Программа для нахождения простых чисел от 1 до 100
Здравствуйте, в задании требуется написать программу для нахождения простых чисел от 1 до 100. В условии сказано, что необходимо создать...

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

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

25
116 / 106 / 51
Регистрация: 29.03.2016
Сообщений: 480
24.07.2016, 14:54
123
0
 Аватар для Maxim09
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
24.07.2016, 14:59  [ТС]
Выдало 1.3.5.7.9.
по моему что-то не то!
0
Заблокирован
24.07.2016, 14:59
Лучший ответ Сообщение было отмечено Maxim09 как решение

Решение

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
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
24.07.2016, 15:00  [ТС]
Нету 2-ки и 9 делится не только на себя и 1, а ещё и на 3 ведь!
0
24.07.2016, 15:00

Не по теме:

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

0
116 / 106 / 51
Регистрация: 29.03.2016
Сообщений: 480
24.07.2016, 15:00
Лучший ответ Сообщение было отмечено Maxim09 как решение

Решение

исправился
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
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
24.07.2016, 15:18  [ТС]
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
37 / 36 / 9
Регистрация: 16.04.2015
Сообщений: 283
24.07.2016, 15:18
Не правильно вы ребятки пишете.

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

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
116 / 106 / 51
Регистрация: 29.03.2016
Сообщений: 480
24.07.2016, 15:30
Цитата Сообщение от Maxim09 Посмотреть сообщение
Опять не то
Цитата Сообщение от Maxim09 Посмотреть сообщение
Выдаёт 3.5.7.
все то. 1 и 2 дописать самостоятельно можно. кроме того число 2 является единственным четным в ряде простых чисел, что наводит на мысль - "а стоит ли его воспринимать как простое?"
1 - делится на любое число, что мне, лично тоже не нравится (это скорее фундаментальное число, которое как простое тоже воспринимать не имеет смысла)
Практической пользы в них нет
0
Заблокирован
24.07.2016, 15:34
Чисто для себя узнать, мой корректный алгоритм нарочно игнорируется?
Кликните здесь для просмотра всего текста
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
1 / 1 / 4
Регистрация: 23.08.2015
Сообщений: 458
24.07.2016, 15:39  [ТС]
Unknownx,
Ваш алгоритм я понял и благодарен вам за помощь!
А вот алгоритм другого товарища Serg_o_Grey, не совсем вот и колупаю маленько

Добавлено через 1 минуту
Только вот не пойму а какое действие делает вот эта часть кода:
C++
1
j && f == 0
0
 Аватар для shilko2013
257 / 234 / 185
Регистрация: 02.04.2016
Сообщений: 898
24.07.2016, 15:40
Вообще-то есть решето Эратосфена
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
37 / 36 / 9
Регистрация: 16.04.2015
Сообщений: 283
24.07.2016, 15:40
Цитата Сообщение от Unknownx Посмотреть сообщение
Чисто для себя узнать, мой корректный алгоритм нарочно игнорируется?
Алгоритм - это когда всё понятно. А у Вас - непонятно!
Вывод на экран это часть алгоритма?
0
116 / 106 / 51
Регистрация: 29.03.2016
Сообщений: 480
24.07.2016, 15:45
Maxim09, в алгоритме товарища Unknownx, лишние действия выполняются, а именно проверка четных чисел, что не рационально, но тем не менее правильно
1
 Аватар для SerVal
37 / 36 / 9
Регистрация: 16.04.2015
Сообщений: 283
24.07.2016, 15:45
Цитата Сообщение от shilko2013 Посмотреть сообщение
Вообще-то есть решето Эратосфена
У него только один недостаток - оно не распараллеливается.
То есть, от 4-х ядер процессора - никакого толку. Правда, Эратосфен в этом не виноват.
0
Заблокирован
24.07.2016, 15:50
Цитата Сообщение от 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 просто не начинается, надеюсь теперь всё понятно
0
116 / 106 / 51
Регистрация: 29.03.2016
Сообщений: 480
24.07.2016, 15:52
Цитата Сообщение от shilko2013 Посмотреть сообщение
Вообще-то есть решето Эратосфена
задача была поставлена именно данный автором код подправить

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

Не по теме:


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

0
 Аватар для SerVal
37 / 36 / 9
Регистрация: 16.04.2015
Сообщений: 283
24.07.2016, 15:56
Во-первых, непонятно, какое отношение к алгоритму имеет функция main?

Цитата Сообщение от Unknownx Посмотреть сообщение
Теперь 8-ка
8 % 2 == 0 ага остаток 0
На двойку-то зачем делить??? В самом начале надо
C++
1
if ((candidate & 1) == 0) return false; // число чётное
0
116 / 106 / 51
Регистрация: 29.03.2016
Сообщений: 480
24.07.2016, 16:01
Цитата Сообщение от SerVal Посмотреть сообщение
Зачем делить-то???
C++
Выделить код
1
if ((candidate & 1) == 0) return false; // число чётное
if ((15 & 1) == 0) return false; // число нечетное
и что?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.07.2016, 16:01
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru