Advertisement
Solingen

z7.1.cpp

Dec 22nd, 2024
22
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.29 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. // Функция возвращает сумму собственных делителей числа x
  5. long long sumOfDivisors(long long x)
  6. {
  7.     long long s = 1; // 1 - всегда делитель (если x>1)
  8.     for (long long d = 2; d*d <= x; d++)
  9.     {
  10.         if (x % d == 0)
  11.         {
  12.             s += d;
  13.             long long other = x / d;
  14.             if (other != d) s += other; // учесть парный делитель
  15.         }
  16.     }
  17.     return s;
  18. }
  19.  
  20. int main()
  21. {
  22.     int N;
  23.     cout << "Сколько совершенных чисел вывести? ";
  24.     cin >> N;
  25.  
  26.     // Ищем подряд совершенные числа. Известно, что они встречаются редко.
  27.     // 6, 28, 496, 8128, ...
  28.     // Можно просто перебирать натуральные числа, проверять, пока не соберём N штук
  29.     int countFound = 0;
  30.     long long candidate = 2;
  31.  
  32.     while (countFound < N)
  33.     {
  34.         long long s = sumOfDivisors(candidate);
  35.         if (s == candidate)
  36.         {
  37.             cout << candidate << " — совершенное число\n";
  38.             countFound++;
  39.         }
  40.         candidate++;
  41.     }
  42.  
  43.     return 0;
  44. }
  45.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement