С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/25: Рейтинг темы: голосов - 25, средняя оценка - 4.56
1 / 1 / 0
Регистрация: 01.10.2010
Сообщений: 59

Найти количество совершенных и простых чисел в последовательности

12.10.2010, 15:06. Показов 5370. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Помогите пожалуйста!
Вводится последовательность целых чисел, 0 – конец последовательности. Найти количество совершенных и простых чисел в последовательности (результатами функций будет:1 – число простое, 0 – число непростое; 1 – число совершенное, 0 - нет).
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.10.2010, 15:06
Ответы с готовыми решениями:

Найти количество совершенных и простых чисел в последовательности
Нужна помощь! Вводится последовательность целых чисел, 0 – конец последовательности. Найти количество совершенных и простых чисел в...

Найти количество совершенных и простых чисел в последовательности
Вводится последовательность целых чисел, 0 – конец последовательности. Найти количество совершенных и простых чисел в последовательности ...

Найти, каких чисел в последовательности больше - простых или совершенных? С++
Вводится последовательность целых чисел, 0 – конец последовательности. Найти, каких чисел в последовательности больше - простых или...

18
Бродяга
 Аватар для dihlofos
315 / 269 / 56
Регистрация: 27.08.2010
Сообщений: 553
12.10.2010, 15:45
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
50
51
52
53
54
55
56
#include <iostream>
#include <math.h>
 
using namespace std;
 
bool simple (int x)
{
    int i;
    if(x<=1)
        return 0;
    else
        for(i=2; i<=sqrt(x); i++)
            if (x%i==0)
                return 0;
    return 1;
}
bool perfect (int x)
{
    int i,sum=0;
    if (x>0)
    {
        for (i=1;i<=x/2;i++)
            if (x%i==0)
                sum+=i;
        if(x==sum)
            return 1;
    }
    return 0;
}
 
 
int main()
{
    const int SIZE=50;
    int n,i,array[SIZE];
 
    for(i=0; i<SIZE; i++)
    {
        cout<<"Vvedite element["<<i<<"]: ";
        cin>>array[i];
        if(array[i]==0)
            break;
    }
    n=i;
 
    for(i=0; i<n; i++)
    {
        cout<<"Element ["<<i<<"] = "
            <<array[i]<<" "
            <<(simple(array[i])?" Prostoe":"")
            <<(perfect(array[i])?" Sovershennoe":"")<<endl;
    }
    cout<<endl;
    system("pause");
    return 0;
}
Сделал через статический массив. Хотя тут логичнее наверное векотры использовать.
1
1 / 1 / 0
Регистрация: 01.10.2010
Сообщений: 59
12.10.2010, 16:02  [ТС]
А можно решить это задание не использую массив? Можно решить только через цикл?
0
Бродяга
 Аватар для dihlofos
315 / 269 / 56
Регистрация: 27.08.2010
Сообщений: 553
12.10.2010, 18:26
А, ну да, так ещё проще будет.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main()
{
    int i,n;
 
    while(true)
    {
        cout<<"Vvedite chislo: ";
        cin>>n;
        if(n==0) break;
        cout<<"Chislo "<<n<<" "
             <<(simple(n)?" Prostoe":" Ne prostoe")
             <<(perfect(n)?" Sovershennoe":" Ne sovershennoe")<<endl;
    }
 
    cout<<endl;
    system("pause");
    return 0;
}
Добавлено через 15 секунд
P.S. Функции simple и perfect те же.
1
1 / 1 / 0
Регистрация: 01.10.2010
Сообщений: 59
14.10.2010, 07:46  [ТС]
А что такое simple и perfect? у меня выдал ошибку.
error C3861: simple: идентификатор не найден и error C3861: perfect: идентификатор не найден.
0
Бродяга
 Аватар для dihlofos
315 / 269 / 56
Регистрация: 27.08.2010
Сообщений: 553
14.10.2010, 07:49
Ну я же написал, функции те же, то бишь с предыдущего кода) Полная версия:
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
#include <iostream>
#include <math.h>
 
using namespace std;
 
bool simple (int x)
{
        int i;
        if(x<=1)
                return 0;
        else
                for(i=2; i<=sqrt(x); i++)
                        if (x%i==0)
                                return 0;
        return 1;
}
bool perfect (int x)
{
        int i,sum=0;
        if (x>0)
        {
                for (i=1;i<=x/2;i++)
                        if (x%i==0)
                                sum+=i;
                if(x==sum)
                        return 1;
        }
        return 0;
}
int main()
{
        int i,n;
 
        while(true)
        {
                cout<<"Vvedite chislo: ";
                cin>>n;
                if(n==0) break;
                cout<<"Chislo "<<n<<" "
                         <<(simple(n)?" Prostoe":" Ne prostoe")
                         <<(perfect(n)?" Sovershennoe":" Ne sovershennoe")<<endl;
        }
 
        cout<<endl;
        system("pause");
        return 0;
}
perfect - ф-ция для поиска совершенного, simple - для поиска простого числа.
1
1 / 1 / 0
Регистрация: 01.10.2010
Сообщений: 59
14.10.2010, 10:28  [ТС]
Уважаймый dihlofos, можно вопрос? почему для simple (int x) выпишете в цикле for i<=sqrt(x), ведь простые числа это i<=x/2. Просто какое бы число я не ввела,оно всегда не совершнное, хотя в инете посмотрела и знаю точно, что 6 и 28 совершенное число?
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
14.10.2010, 10:34
Я может несколько не в теме, но ведь simple проверяет, является число простым или нет, к совершенным эта функция не относится. Их проверяет функция prefect, а в ней цикл идёт до как раз x/2.
1
1 / 1 / 0
Регистрация: 01.10.2010
Сообщений: 59
14.10.2010, 10:45  [ТС]
Вы права.Но как раз простые числа должны идти до х/2

Добавлено через 4 минуты
Просто когда я запускаю Ваш код,у меня выводит ошибку, он ругается на sqrt

Добавлено через 2 минуты
Может я что-то не понимаю и не догоняю.Объясните пожалуйста,если не трудно.
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
14.10.2010, 10:46
http://ru.wikipedia.org/wiki/Решето_Эратосфена
Основная фраза: "останавливать алгоритм можно, когда p^2 станет больше, чем n"
p в данном случае - i, а n - x. "когда p^2 станет больше, чем n" - то же самое, что "когда p станет больше, чем sqrt(n)"
Попробуйте написать в начале вместо math.h cmath
1
Бродяга
 Аватар для dihlofos
315 / 269 / 56
Регистрация: 27.08.2010
Сообщений: 553
14.10.2010, 13:52
Селявкина Мария, у вас какой компилятор? Попробуйте сделать с приведением типов:
C++
1
for(i=2; i<=sqrt((double)x); i++)
Вообще верхней границей можно сделать и x/2 и больше, вплоть до x-1. Результат будет тот же, но с большими затратами(
Цитата Сообщение от Селявкина Мария Посмотреть сообщение
Просто какое бы число я не ввела,оно всегда не совершнное, хотя в инете посмотрела и знаю точно, что 6 и 28 совершенное число?
Считать должно правильно, проверял. Вот попробуйте такой код: выводит список всех простых и совершенных чисел от 0 до 1000:
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
#include <iostream>
#include <math.h>
 
using namespace std;
 
bool simple (int x)
{
        int i;
        if(x<=1)
                return 0;
        else
                for(i=2; i<=sqrt((double)x); i++)
                        if (x%i==0)
                                return 0;
        return 1;
}
bool perfect (int x)
{
        int i,sum=0;
        if (x>0)
        {
                for (i=1;i<=x/2;i++)
                        if (x%i==0)
                                sum+=i;
                if(x==sum)
                        return 1;
        }
        return 0;
}
int main()
{
    int n;
    cout<<"Perfect:\n";
    for(n=0; n<10000; n++)
        if(perfect(n))
            cout<<n<<'\t';
 
    cout<<"\n\nSimple:\n";
    for(n=0; n<10000; n++)
        if(simple(n))
            cout<<n<<'\t';
 
    cout<<endl;
    system("pause");
    return 0;
}
Сверьтесь с википедией)
Миниатюры
Найти количество совершенных и простых чисел в последовательности  
1
1 / 1 / 0
Регистрация: 01.10.2010
Сообщений: 59
14.10.2010, 15:15  [ТС]
У меня стоит Microsoft Visual Studio 2008
0
Бродяга
 Аватар для dihlofos
315 / 269 / 56
Регистрация: 27.08.2010
Сообщений: 553
14.10.2010, 15:19
C++
1
for(i=2; i<=sqrt((double)x); i++)
Попробовали так сделать? Работает? Сам на студии проверял)
1
1 / 1 / 0
Регистрация: 01.10.2010
Сообщений: 59
14.10.2010, 15:23  [ТС]
Спасибо!Все заработало
0
1 / 1 / 0
Регистрация: 01.10.2010
Сообщений: 59
21.10.2010, 20:22  [ТС]
А как теперь сделать,чтобы программа выводила кол-во совершенных ипростых чисел?
0
Бродяга
 Аватар для dihlofos
315 / 269 / 56
Регистрация: 27.08.2010
Сообщений: 553
22.10.2010, 07:16
Селявкина Мария, ввести дополнительно счётчики для этих чисел:

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
int main()
{
int i,n;
int sCount=0, pCount=0;
 
while(true)
{
    cout<<"Vvedite chislo: ";
    cin>>n;
    if(n==0) break;
    cout<<"Chislo "<<n;
 
    if(simple(n))
    {
        cout<<" Prostoe";
        sCount++;
    }
    else
        cout<<" Ne prostoe";
 
    if(perfect(n))
    {
        cout<<" Sovershennoe\n";
        pCount++;
    }
    else
        cout<<" Ne sovershennoe\n";
}
 
cout<<"\nVsego prostyh: "<<sCount<<endl;
cout<<"\nVsego soverschrnnyh: "<<pCount<<endl;
 
cout<<endl;
system("pause");
return 0;
}
1
1 / 1 / 0
Регистрация: 01.10.2010
Сообщений: 59
22.10.2010, 09:21  [ТС]
Уважаемый dihlofos, огромное ва спсибо.Но у меня есть один вопрос-программа работает все хорошо,но в итоге она не выдает сколько я ввела простых,а сколько совершенных чисел???
0
Бродяга
 Аватар для dihlofos
315 / 269 / 56
Регистрация: 27.08.2010
Сообщений: 553
22.10.2010, 09:42
Селявкина Мария, а что выдаёт?
Миниатюры
Найти количество совершенных и простых чисел в последовательности  
1
1 / 1 / 0
Регистрация: 01.10.2010
Сообщений: 59
22.10.2010, 09:48  [ТС]
Спасибо,я поняла,у меня ведь 0 конец последовательности.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.10.2010, 09:48
Помогаю со студенческими работами здесь

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

Посчитать количество совершенных и простых чисел в последовательности (с использованием функций)
Помогите с программой , пожалуйста ) Условие : Вводиться последовательность из N целых положительных элементов. Посчитать количество...

Вычислить количество простых и совершенных чисел
помогите пожалуйста составить прогу: Вычислить количество простых и совершенных чисел, не превосходящих заданного числа N. я в ступоре :(...

Найти количество простых чисел в последовательности
Есть последовательность целых чисел. Последнее число 2. Найти количество простых чисел в последовательности. Надо использовать массив. ...

В последовательности 1..n найти количество простых чисел
В последовательности 1..n найти количество простых чисел И Наименьший общий делитель A, B


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru