Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Простые числа. Найти и напечатать. 
V
    Опции темы
max29
Дата 1.6.2016, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 16.4.2016

Репутация: нет
Всего: нет



Такая вот задачка: Составить прог-му  которая формирует массив элементы которого являются простыми числами не превосходящими заданное натуральное число (n).
К примеру (n=10) то должно напечатать  2,3,5,7,9. Вроде-бы так.

Напишите плиз прогу, хочется увидеть и понять как это составляется.
А-то у самого не получается. smile 
 smile 
PM MAIL   Вверх
rudolfninja
Дата 1.6.2016, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 341
Регистрация: 19.2.2013
Где: г. Минск

Репутация: 1
Всего: 6



Для начала нужно написать функцию, которая определяет является ли переданное ей число простым. Примеров этой функции в интернете полно. Вот один из них.
Далее вы в цикле прибигаете по всем числам до заданного и проверяете является ли число простым. В случае, если это так, просто добавляете его в массив.
Пробуйте сделать сами. Будут вопросы - пишите сюда.

Добавлено через 1 минуту и 23 секунды
Цитата(max29 @  1.6.2016,  14:24 Найти цитируемый пост)
К примеру (n=10) то должно напечатать  2,3,5,7,9. Вроде-бы так.

А еще, 9 - непростое число, т.к. у него больше 2ух делителей.

Это сообщение отредактировал(а) rudolfninja - 1.6.2016, 16:40
PM MAIL Skype   Вверх
max29
Дата 1.6.2016, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 16.4.2016

Репутация: нет
Всего: нет



Такая вот прога в ней что-то не так работает так как она выдаёт простые вместе с непростыми числа.
Код

    int f=0;
    int n=10;
    for (int j=2; j < n; j++)
    {
        for(int i=2; i<=j/2; i++) 
            if( n%j == 0 ) 
            {
                f=1; break;
            }
        if(f == 0)  cout<<j<<setw(3);
        f=0;
    }
    cout<<endl;
    system("pause");
    return;

PM MAIL   Вверх
Tieswar
Дата 1.6.2016, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 29.5.2016
Где: Томск

Репутация: нет
Всего: нет



Почему здесь
Код

for(int i=2; i<=j/2; i++) 

проверяется только половина чисел?
Должно быть так
Код

for(int i=2; i<=j; i++) 


По решению: заведи счётчик делителей числа. В конце основного цикла проверяй его на равенство двум (так как у простого числа 2 делителя), и если равен, то выводи число. 

Это сообщение отредактировал(а) Tieswar - 1.6.2016, 20:23
PM MAIL Skype   Вверх
max29
Дата 1.6.2016, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 16.4.2016

Репутация: нет
Всего: нет



Вы бы не могли написать прогу ато у меня вот что вышло:
Код

    int f=0;
    int n=10;
    for (int j=2; j < n; j++)
    {
        for(int i=2; i<=j; i++) 
            if( n%j == 0 ) 
            {
                f=1; break;             
            }
        if(j == 2)  cout<<j<<setw(3);
        f=0;
    }
    cout<<endl;
    system("pause");
    return 0;
}

Просто у меня очень большая ахота посмотреть на готовую версию хочу понять как работает.

Это сообщение отредактировал(а) max29 - 1.6.2016, 21:26
PM MAIL   Вверх
baldman88
Дата 1.6.2016, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 18.1.2009

Репутация: 1
Всего: 7



Цитата(Tieswar @ 1.6.2016,  20:19)
Почему здесь
Код

for(int i=2; i<=j/2; i++) 

проверяется только половина чисел?
Должно быть так
Код

for(int i=2; i<=j; i++) 

Потому, что наименьший делитель 2. В данном случае условие верно:
Код

for (int i = 2; i <= j / 2; i++)


Добавлено @ 21:55
Цитата(max29 @ 1.6.2016,  21:25)
Вы бы не могли написать прогу ато у меня вот что вышло:
Просто у меня очень большая ахота посмотреть на готовую версию хочу понять как работает.

С такими запросами -- в раздел помощи.
Ну а по делу:
1. Вернуть прежнее условие для цикла с переменной i;
2. В шестой строке условие привести к виду
Код

if(j % i == 0)
3. В десятой строке условие привести к виду:
Код

if(f == 0)


Это сообщение отредактировал(а) baldman88 - 1.6.2016, 21:57
PM MAIL   Вверх
Tieswar
Дата 1.6.2016, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 29.5.2016
Где: Томск

Репутация: нет
Всего: нет



У меня вот такое решение
Код

    const int N = 25;
    int cnt = 0;

    cout << 1 << " ";
    for(int i = 1; i <= N; i++)
    {
        cnt = 0; // сбрасываем счётчик
        for(int i2 = 1; i2 <= i; i2++)
        {
            if(i % i2 == 0)
                cnt++;
        }//for #2

        if(cnt == 2) // если у числа всего 2 делителя, то оно - простое
            cout << i << " ";

    }//for #1
    cout << endl;
    return 0;

Вывод:
Скрытый текст

1 2 3 5 7 11 13 17 19 23




...Ну да, я понял, что не оптимально делать со счётчиком делителей.
Действительно, так гораздо больше вычислений.

Это сообщение отредактировал(а) Tieswar - 1.6.2016, 22:01
PM MAIL Skype   Вверх
baldman88
Дата 1.6.2016, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 18.1.2009

Репутация: 1
Всего: 7



Цитата(Tieswar @ 1.6.2016,  21:56)
У меня вот такое решение

А теперь попробуйте во втором условии (для переменной i2) поставить условие считать до i/2, и cnt проверять на равенство единице. Получите тоже самое, но в два раза меньше итераций.

Добавлено через 2 минуты и 56 секунд
Цитата(Tieswar @ 1.6.2016,  21:56)
...Ну да, я понял, что не оптимально делать со счётчиком делителей.

Попробуйте сделать так, как я описал выше и получите ту же эффективность. Здесь эффективность ограниченна алгоритмом который использовал ТС.
PM MAIL   Вверх
Envy
Дата 2.6.2016, 10:08 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Решето Эратосфена
Там даже псевдокод есть

Этот ответ добавлен с нового Винграда - http://vingrad.com
  Вверх
xvr
Дата 2.6.2016, 12:20 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Вы забыли про условие -
Цитата(max29 @  1.6.2016,  14:24 Найти цитируемый пост)
Составить прог-му  которая формирует массив элементы которого являются простыми числами

С наличием массива задача упрощается - нужно проверять делимость не на все числа, меньшие тестируемого, а на все простые, меньше тестируемого. И они (сюрприз!) уже сложены в результирующий массив.

PM MAIL   Вверх
baldman88
Дата 2.6.2016, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 18.1.2009

Репутация: 1
Всего: 7



Цитата(xvr @ 2.6.2016,  12:20)
Вы забыли про условие -
Цитата(max29 @  1.6.2016,  14:24 Найти цитируемый пост)
Составить прог-му  которая формирует массив элементы которого являются простыми числами

С наличием массива задача упрощается - нужно проверять делимость не на все числа, меньшие тестируемого, а на все простые, меньше тестируемого. И они (сюрприз!) уже сложены в результирующий массив.

Нет, не забыли. Мы попытались помочь ТСу понять где ошибка в его коде. А вот программу пусть составляет сам. Он уже в течении пары месяцев просит писать программы за него. За это время уже можно было научится писать самостоятельно, и просто задавать вопросы по тому, что не получаестя, а не в наглую выпрашивать чтобы кто-то написал. Ради интереса можете просмотреть все его темы.
Еще раз перечитал Ваше сообщение. Если Вы это не помошникам писали, то прошу извинения за резкость. Просто автор очень хитер и коварен, но, увы, ленив.

Это сообщение отредактировал(а) baldman88 - 2.6.2016, 12:37
PM MAIL   Вверх
xvr
Дата 2.6.2016, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(baldman88 @  2.6.2016,  12:35 Найти цитируемый пост)
Еще раз перечитал Ваше сообщение. Если Вы это не помошникам писали, то прошу извинения за резкость.

Писал в основном автору вопроса.

PM MAIL   Вверх
max29
Дата 2.6.2016, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 16.4.2016

Репутация: нет
Всего: нет



Всё понятно, если кто-то перетрудился из за моих просьб то прошу меня простить.

Это сообщение отредактировал(а) max29 - 2.6.2016, 20:06
PM MAIL   Вверх
baldman88
Дата 2.6.2016, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 210
Регистрация: 18.1.2009

Репутация: 1
Всего: 7



Цитата(max29 @ 2.6.2016,  20:04)
Всё понятно, если кто-то перетрудился из за моих просьб то прошу меня простить.

Ну вот зачем ерничать? Перечитайте сами свои темы -- Вы не просите, Вы выпрашиваете. Если не секрет, на кого Вы учитесь?
PM MAIL   Вверх
max29
Дата 3.6.2016, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 38
Регистрация: 16.4.2016

Репутация: нет
Всего: нет



Прикладная информатика в экономике.
С++ нам преподавали только 1 курс и не углублённо (мало уроков было) вот я и пытаюсь своими силами как нибудь выучить этот язык. И иногда мне удобнее на готовом примере понять как работает то или иное в С++ так как только лишь теории маловато а своими силами я делаю море ошибок в коде.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0590 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.