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