Grade 9 · Divisibility and prime numbersCitește în română
Perfect number
Original: Număr perfect
O(√n)C++1746 lines2 examples
The idea
A number is perfect if it equals the sum of its divisors smaller than itself (6 = 1 + 2 + 3). We compute the sum of all divisors in O(√n) and subtract n.
Original description (Romanian)
Un număr este perfect dacă este egal cu suma divizorilor săi mai mici decât el (6 = 1 + 2 + 3). Calculăm suma tuturor divizorilor în O(√n) și scădem n.
- Complexity
- O(√n)
- Grade
- Grade 9 (Clasa a IX-a)
Examples
Example 1
Input
28
Expected output
DA
Example 2
Input
12
Expected output
NU
The code
Comments are in Romanian, as in the original collection. Edit freely: you can reset at any time.
/*
* Titlu: Număr perfect
* Clasa: 9
* Capitol: Divizibilitate și numere prime
* Descriere: Un număr este perfect dacă este egal cu suma divizorilor săi mai
* mici decât el (6 = 1 + 2 + 3). Calculăm suma tuturor divizorilor în
* O(√n) și scădem n.
* Complexitate: O(√n)
*
* Exemplu
* Intrare: 28
* Ieșire: DA
*
* Exemplu
* Intrare: 12
* Ieșire: NU
*/
#include <iostream>
using namespace std;
int main()
{
long long n, suma = 0;
cin >> n;
for (long long d = 1; d * d <= n; d++)
{
if (n % d == 0)
{
suma = suma + d;
if (d * d != n)
{
suma = suma + n / d;
}
}
}
if (n > 1 && suma - n == n)
{
cout << "DA" << '\n';
}
else
{
cout << "NU" << '\n';
}
return 0;
}
Runs on a real g++ (C++17, -O2) through Compiler Explorer. Keep runs short; there's a time limit.