Computer >> Máy Tính >  >> Lập trình >> C ++

Kiểm tra xem một số có thể được biểu thị dưới dạng tổng của hai số dồi dào trong C ++ hay không

Giả sử chúng ta có một số. Chúng ta phải biểu thị điều này dưới dạng tổng của hai Số dồi dào, nếu có, in các số, nếu không thì in -1. Một số được cho là Số dồi dào là tổng của tất cả các ước số thích hợp của số đó, được ký hiệu là sum (n) lớn hơn giá trị của số.

Để giải quyết vấn đề này, chúng ta sẽ lưu trữ tất cả các số dồi dào thành một tập hợp và đối với số n đã cho, hãy chạy một vòng lặp cho i =1 đến n và kiểm tra n và (n - i) có nhiều hay không.

Ví dụ

#include <iostream>
#include <set>
#define N 100005
using namespace std;
set<int> getAbundantSet() {
   set<int> abundant_set;
   for (int i = 1; i < N; i++) {
      int sum = 1;
      for (int j = 2; j * j <= i; j++) {
         if (i % j == 0) {
            sum += j;
            if (i / j != j)
            sum += i / j;
         }
      }
      if (sum > i)
         abundant_set.insert(i);
   }
   return abundant_set;
}
void representSumAbundant(int number){
   set<int> abundant_set = getAbundantSet();
   for (int i = 1; i <= number; i++) {
      if (abundant_set.count(i) && abundant_set.count(number - i)) {
         cout << i << " " << number - i;
         return;
      }
   }
   cout << -1;
}
int main() {
   int n = 30;
   representSumAbundant(n);
}

Đầu ra

12 18