被订婚的数字是两个正数,因此任一数字的适当除数之和大于另一个数字的值(或一个加号)。我们的任务是有效地找到这些对。
例子 :
(48, 75) is an example of Betrothed numbers
Divisors of 48 : 1, 2, 3, 4, 6, 8, 12,
16, 24. Their sum is 76.
Divisors of 75 : 1, 3, 5, 15, 25. Their
sum is 49.
给定正整数n,请打印所有Brothered数字(一对),以使每对数字中的一个小于n。
例子 :
Input : n = 1000
Output : (48, 75), (140, 195)
Input : n = 10000
Output : (48, 75), (140, 195), (1050, 1925)
(1575, 1648), (2024, 2295), (5775,
6128) (8892, 16587), (9504, 20735)
以下程序中使用的想法很简单。我们遍历从1到n-1的所有数字。对于每个数字num1,我们发现其适当除数的总和称为sum1。找到sum1后,我们检查数字num2 = sum1 + 1的除数之和为num1 + 1
C++
// CPP program to find Betrothed number pairs
// such that one of the numbers is smaller than
// a given number n.
#include
using namespace std;
void BetrothedNumbers(int n)
{
for (int num1 = 1; num1 < n; num1++) {
// Calculate sum of num1's divisors
int sum1 = 1; // 1 is always a divisor
// i=2 because we don't want to include
// 1 as a divisor.
for (int i = 2; i * i <= num1; i++)
{
if (num1 % i == 0) {
sum1 += i;
// we do not want to include
// a divisor twice
if (i * i != num1)
sum1 += num1 / i;
}
}
// Now check if num2 is the sum of
// divisors of num1, so only the num
// that equals to sum of divisors of
// num1 is a nominee for num1.
/* This if is for not to make a
duplication of the nums, because
if sum1 is smaller than num1, this
means that we have already checked
the smaller one.*/
if (sum1 > num1)
{
int num2 = sum1 - 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;
}
}
// checks if the sum divisors of
// num2 is equal to num1.
if (sum2 == num1+1)
printf("(%d, %d)\n", num1, num2);
}
}
}
// Driver code
int main()
{
int n = 10000;
BetrothedNumbers(n);
return 0;
}
Java
// JAVA program to find Betrothed number
// pairs such that one of the numbers is
// smaller than a given number n.
import java.io.*;
class GFG{
static void BetrothedNumbers(int n)
{
for (int num1 = 1; num1 < n; num1++) {
// Calculate sum of num1's divisors
int sum1 = 1; // 1 is always a divisor
// i=2 because we don't want to include
// 1 as a divisor.
for (int i = 2; i * i <= num1; i++)
{
if (num1 % i == 0) {
sum1 += i;
// we do not want to include
// a divisor twice
if (i * i != num1)
sum1 += num1 / i;
}
}
// Now check if num2 is the sum of
// divisors of num1, so only the num
// that equals to sum of divisors of
// num1 is a nominee for num1.
/* This if is for not to make a
duplication of the nums, because
if sum1 is smaller than num1, this
means that we have already checked
the smaller one.*/
if (sum1 > num1)
{
int num2 = sum1 - 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;
}
}
// checks if the sum divisors of
// num2 is equal to num1.
if (sum2 == num1+1)
System.out.println("(" + num1 +
", " + num2 + ")");
}
}
}
// Driver code
public static void main(String args[])
{
int n = 10000;
BetrothedNumbers(n);
}
}
// This code is contributed by Nikita Tiwari.
Python
# Python program to find Betrothed number pairs
# such that one of the numbers is smaller than
# a given number n.
def BetrothedNumbers(n) :
for num1 in range (1,n) :
# Calculate sum of num1's divisors
sum1 = 1 # 1 is always a divisor
# i=2 because we don't want to include
# 1 as a divisor.
i = 2
while i * i <= num1 :
if (num1 % i == 0) :
sum1 = sum1 + i
# we do not want to include
# a divisor twice
if (i * i != num1) :
sum1 += num1 / i
i =i + 1
# Now check if num2 is the sum of
# divisors of num1, so only the num
# that equals to sum of divisors of
# num1 is a nominee for num1.
# This if is for not to make a
#duplication of the nums, because
#if sum1 is smaller than num1, this
#means that we have already checked
#the smaller one.
if (sum1 > num1) :
num2 = sum1 - 1
sum2 = 1
j = 2
while j * j <= num2 :
if (num2 % j == 0) :
sum2 += j
if (j * j != num2) :
sum2 += num2 / j
j = j + 1
# checks if the sum divisors of
# num2 is equal to num1.
if (sum2 == num1+1) :
print ('('+str(num1)+', '+str(num2)+')')
# Driver code
n = 10000
BetrothedNumbers(n)
# This code is contributed by Nikita Tiwari.
C#
// C# program to find Betrothed
// number pairs such that one
// of the numbers is smaller
// than a given number n.
using System;
class GFG
{
static void BetrothedNumbers(int n)
{
for (int num1 = 1; num1 < n; num1++)
{
// Calculate sum of
// num1's divisors
// 1 is always a divisor
int sum1 = 1;
// i=2 because we don't want
// to include 1 as a divisor.
for (int i = 2; i * i <= num1; i++)
{
if (num1 % i == 0)
{
sum1 += i;
// we do not want to include
// a divisor twice
if (i * i != num1)
sum1 += num1 / i;
}
}
// Now check if num2 is the
// sum of divisors of num1,
// so only the num that equals
// to sum of divisors of num1
// is a nominee for num1.
/* This if is for not to
make a duplication of the
nums, because if sum1 is
smaller than num1, this
means that we have already
checked the smaller one.*/
if (sum1 > num1)
{
int num2 = sum1 - 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;
}
}
// checks if the sum divisors
// of num2 is equal to num1.
if (sum2 == num1 + 1)
Console.WriteLine("(" + num1 +
", " + num2 + ")");
}
}
}
// Driver code
public static void Main()
{
int n = 10000;
BetrothedNumbers(n);
}
}
// This code is contributed by nitin mittal.
PHP
$num1)
{
$num2 = $sum1 - 1;
$sum2 = 1;
for ($j = 2; $j * $j <= $num2; $j++)
{
if ($num2 % $j == 0) {
$sum2 += $j;
if ($j * $j != $num2)
$sum2 += $num2 / $j;
}
}
// checks if the sum divisors of
// num2 is equal to num1.
if ($sum2 == $num1+1)
echo"(",$num1," ",$num2,")\n";
}
}
}
// Driver code
$n = 10000;
BetrothedNumbers($n);
// This code is contributed by anuj_67.
?>
Javascript
输出 :
(48, 75)
(140, 195)
(1050, 1925)
(1575, 1648)
(2024, 2295)
(5775, 6128)
(8892, 16587)
(9504, 20735)