Advertisement
DaniDori

Untitled

Dec 20th, 2021
778
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.44 KB | None | 0 0
  1. //Лабораторная работа на нахождение совершенных чисел.
  2. //Выполнила Инна Васильева
  3.  
  4. #include<iostream>
  5. #include<vector>
  6. #include<time.h>
  7. using namespace std;
  8.  
  9. int main() {
  10.  
  11.     int n;
  12.     cout << "Enter the upper bound:\n";
  13.     cin >> n;
  14.  
  15.     //удобный динамический массив(и список при необходимости)
  16.     vector<int>arr;
  17.  
  18.     //задаем длинну и заполняем int(1)
  19.     arr.assign(n+1, 1);
  20.  
  21.     cout << "Perfect numbers:\n";
  22.  
  23.     //засекаем время
  24.     clock_t tStart = clock();
  25.  
  26.     //используя алгоритм аналогичный решету эратосфена
  27.     //подсчитываем в каждом числе сумму его делителей
  28.     //используя принцип динамического программирования
  29.     for (int i = 2; i < arr.size(); i++) {
  30.         //если сумма делителей совпала с числом - оно совершенное выводим
  31.         if (arr[i] == i)
  32.             cout << i << endl;
  33.  
  34.         //от каждого числа проходимся по его делителям
  35.         //и добавляем это число в их счетчики
  36.         for (int j = i + i; j < n; j += i) {
  37.             arr[j] += i;
  38.         }
  39.     }
  40.  
  41.     //выводим время выполнения
  42.     printf("Time taken: %.2fs\n", (double)(clock() - tStart) / CLOCKS_PER_SEC);
  43. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement