C++.Совершенным называется число, равное сумме всех своих делителей, меньших его самого...

0 голосов
85 просмотров

C++.Совершенным называется число, равное сумме всех своих делителей, меньших его самого (например, число 6=1+2+3). Напишите программу, которая вводит натуральное число N и определяет, является ли число N совершенным.


Информатика (57 баллов) | 85 просмотров
Дан 1 ответ
0 голосов
Правильный ответ

#include

using namespace std;

bool perfect_number(int n)
{
    int res = 1;
    for (int i = 2; i * i <= n; ++i)<br>        if (n % i == 0)
            res += i + n / i;
    return res == n?1:0;
}

int main()
{
    int n;
    cin >> n;
    cout << perfect_number(n)?"YES":"NO";<br>}


(8.8k баллов)
0

#include

using namespace std;

ofstream o("output.txt");
void Zout(long long n)
{
for (int i = 1; i <= n/2 ; ++i)<br> if (n % i == 0)
o << i << ' ';<br>
}
bool perfect_number(long long n)
{
int res = 1;

for (int i = 2; i * i <= n; ++i)<br> if (n % i == 0)
res += i + n / i;
return res == n?1:0;
}

int main()
{
ifstream l("input.txt");
long long n;
l >> n;
if (perfect_number(n))
Zout(n);
else o << 0;<br>}

0

Спасибо огромное! Очень помог! А можно спросить, что значит perfect_number , Zout, ofstream o("output.txt");
void Zout(long long n)

0

perfect_number - название функции

0

Zout - название процедуры

0

ofstream o("output.txt"); - открыл поток ВЫХОДНЫХ данных,который будет выводить данные в файл"output.txt", и обозвал его "o",

0

все можно написать в int main(), но иногда разбить задачу на маленькие подзадачи очень даже хорошо

0

Вот, мы обычно в int main() пишем, спасибо тебе огромное, что написал второй вариант и всё разжевал)

0

perfect_nubmer определяет, является ли число совершенным или нет. Zout выводит делители. задача на сайте дана не корректно, т.к. там сказано "должна вывести в одну строчку через пробел все делители этого числа", но ничего не сказано про порядок их выведения, когда я выводил их в порядке, в котором вычислял их, получил 11 баллов.

0

Какой ты умный)

0

И не лень же объяснять, огромное спасибо!)