在 C++ 中检查一个数是否可以表示为两个丰数之和
c++server side programmingprogramming更新于 2024/9/23 0:36:00
假设我们有一个数。我们必须将其表示为两个丰数之和,如果是,则打印该数,否则打印 -1。一个数被称为丰数,是该数所有真因数之和,用 sum(n) 表示,大于该数的值。
为了解决这个问题,我们将所有丰数存储到一个集合中,对于给定数 n,运行一个循环,从 i = 1 到 n,并检查 n 和 (n – i) 是否丰数。
示例
#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); }
输出
12 18