📜  订婚号码

📅  最后修改于: 2021-04-27 23:12:43             🧑  作者: Mango

被订婚的数字是两个正数,因此任一数字的适当除数之和大于另一个数字的值(或一个加号)。我们的任务是有效地找到这些对。
例子 :

(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)