檢查一個數字能否表示為 C++ 中兩個充裕數的和
假設我們有一個數字。我們必須將其表示為兩個充裕數的和,如果是,則列印數字,否則列印 -1。據說一個數字是充裕數,如果該數字的所有真因數之和,表示為 sum(n),大於該數字的值。
要解決這個問題,我們將所有充裕數儲存到一個集合中,然後對於給定的數字 n,從 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
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP