wingman007 icon

FriendlyNumbers

wingman007 | PRO | 09/24/25 08:06:08 AM UTC | 0 ⭐ | 13523 👁️ | Never ⏰ | []
C# |

2.89 KB

|

None

|

0 👍

/

0 👎

/*
В задачата се говори за приятелски числа, които са такива, при които сумата от делителите на едното число е равна на второто число, а сумата от делителите на второто число е равна на първото.
 
Пример:
 
Числата 1184 и 1210 са приятелски. Ако вземем делителите на 1184:
 
Делители на 1184: 1, 2, 4, 8, 16, 32, 37, 74, 148, 296, 592, 1184.
 
Сумата от тях: 1 + 2 + 4 + 8 + 16 + 32 + 37 + 74 + 148 + 296 + 592 + 1184 = 1210.
 
И за числото 1210:
 
Делители на 1210: 1, 2, 5, 10, 11, 22, 55, 110, 121, 242, 605, 1210.
 
Сумата от тях: 1 + 2 + 5 + 10 + 11 + 22 + 55 + 110 + 121 + 242 + 605 + 1210 = 1184.
 
Тези числа са приятелски, защото сумата на делителите на едното число дава другото число и обратно.
 
Как да решим задачата:
 
Програмата трябва да намери приятелски числа в даден диапазон.
 
За всяко число изчисляваме сумата на неговите делители (без самото число).
 
След това проверяваме дали тези две числа са приятелски, т.е. ако сумата от делителите на едното число е равно на второто и обратното.
 
Примерен алгоритъм:
 
За всяко число i от 1 до N:
 
Изчисляваме сумата на делителите на i.
 
Ако тази сума е число j и ако сумата от делителите на j е равно на i, то числата i и j са приятелски.
 
Ще напиша примерен код за решаване на задачата на езика C#:
 
*/
 
using System;
 
class Program
{
    static int SumOfDivisors(int number)
    {
        int sum = 0;
        for (int i = 1; i <= number / 2; i++)
        {
            if (number % i == 0)
            {
                sum += i;
            }
        }
        return sum;
    }
 
    static void Main()
    {
        int limit = 10000;  // Може да промените лимита
        for (int i = 1; i < limit; i++)
        {
            int sumDivisorsI = SumOfDivisors(i);
            if (sumDivisorsI > i)  // Проверяваме само за числа по-големи от i
            {
                int sumDivisorsJ = SumOfDivisors(sumDivisorsI);
                if (sumDivisorsJ == i)
                {
                    Console.WriteLine($"Приятелски числа: {i} и {sumDivisorsI}");
                }
            }
        }
    }
}

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎