Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- // Функция возвращает сумму собственных делителей числа x
- long long sumOfDivisors(long long x)
- {
- long long s = 1; // 1 - всегда делитель (если x>1)
- for (long long d = 2; d*d <= x; d++)
- {
- if (x % d == 0)
- {
- s += d;
- long long other = x / d;
- if (other != d) s += other; // учесть парный делитель
- }
- }
- return s;
- }
- int main()
- {
- int N;
- cout << "Сколько совершенных чисел вывести? ";
- cin >> N;
- // Ищем подряд совершенные числа. Известно, что они встречаются редко.
- // 6, 28, 496, 8128, ...
- // Можно просто перебирать натуральные числа, проверять, пока не соберём N штук
- int countFound = 0;
- long long candidate = 2;
- while (countFound < N)
- {
- long long s = sumOfDivisors(candidate);
- if (s == candidate)
- {
- cout << candidate << " — совершенное число\n";
- countFound++;
- }
- candidate++;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement