
在这里我们将看到订婚号码。这是一对数字,其中一个数字的真因数之和比另一个数字多 1。我们必须找到这些对
例如,这对就像 (48, 75)。所以 48 的约数是 {1, 2, 3, 4, 6, 8, 12, 16, 24},和是 76。同样,75 的约数是 {1, 3, 5, 15, 25},所以和是 49。
算法
订婚对 (n) -
begin
for num in range 1 to n, do
sum := 1
for i in range 2 to num, do
if num is divisible by i, then
sum := sum + i
if i * i is not same as num, then
sum := sum + num / i
end if
end if
if sum > num, then
num2 := sum – 1
sum2 := 1
for j in range 2 to num2, do
if num2 is divisible by j, then
sum2 := sum2 + j
if j * j is not same as num2, then
sum2 := sum2 + num2 / j
end if
end if
done
if sum2 = num + 1, then
print the pair num and num2
end if
end if
done
done
end
示例
#include <iostream>
using namespace std;
void BetrothedPairs(int n) {
for (int num = 1; num < n; num++) {
int sum = 1;
for (int i = 2; i * i <= num; i++) { //go through each number to get proper divisor
if (num % i == 0) {
sum += i;
if (i * i != num) //avoid to include same divisor twice
sum += num / i;
}
}
if (sum > num) {
int num2 = sum - 1;
int sum2 = 1;
for (int j = 2; j * j <= num2; j++){
if (num2 % j == 0) {
sum2 += j;
if (j * j != num2)
sum2 += num2 / j;
}
}
if (sum2 ==
.........................................................