wingman007

FriendlyNumbers

Sep 24th, 2025
295
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.89 KB | None | 0 0
  1. /*
  2. В задачата се говори за приятелски числа, които са такива, при които сумата от делителите на едното число е равна на второто число, а сумата от делителите на второто число е равна на първото.
  3.  
  4. Пример:
  5.  
  6. Числата 1184 и 1210 са приятелски. Ако вземем делителите на 1184:
  7.  
  8. Делители на 1184: 1, 2, 4, 8, 16, 32, 37, 74, 148, 296, 592, 1184.
  9.  
  10. Сумата от тях: 1 + 2 + 4 + 8 + 16 + 32 + 37 + 74 + 148 + 296 + 592 + 1184 = 1210.
  11.  
  12. И за числото 1210:
  13.  
  14. Делители на 1210: 1, 2, 5, 10, 11, 22, 55, 110, 121, 242, 605, 1210.
  15.  
  16. Сумата от тях: 1 + 2 + 5 + 10 + 11 + 22 + 55 + 110 + 121 + 242 + 605 + 1210 = 1184.
  17.  
  18. Тези числа са приятелски, защото сумата на делителите на едното число дава другото число и обратно.
  19.  
  20. Как да решим задачата:
  21.  
  22. Програмата трябва да намери приятелски числа в даден диапазон.
  23.  
  24. За всяко число изчисляваме сумата на неговите делители (без самото число).
  25.  
  26. След това проверяваме дали тези две числа са приятелски, т.е. ако сумата от делителите на едното число е равно на второто и обратното.
  27.  
  28. Примерен алгоритъм:
  29.  
  30. За всяко число i от 1 до N:
  31.  
  32. Изчисляваме сумата на делителите на i.
  33.  
  34. Ако тази сума е число j и ако сумата от делителите на j е равно на i, то числата i и j са приятелски.
  35.  
  36. Ще напиша примерен код за решаване на задачата на езика C#:
  37.  
  38. */
  39.  
  40. using System;
  41.  
  42. class Program
  43. {
  44.     static int SumOfDivisors(int number)
  45.     {
  46.         int sum = 0;
  47.         for (int i = 1; i <= number / 2; i++)
  48.         {
  49.             if (number % i == 0)
  50.             {
  51.                 sum += i;
  52.             }
  53.         }
  54.         return sum;
  55.     }
  56.  
  57.     static void Main()
  58.     {
  59.         int limit = 10000;  // Може да промените лимита
  60.         for (int i = 1; i < limit; i++)
  61.         {
  62.             int sumDivisorsI = SumOfDivisors(i);
  63.             if (sumDivisorsI > i)  // Проверяваме само за числа по-големи от i
  64.             {
  65.                 int sumDivisorsJ = SumOfDivisors(sumDivisorsI);
  66.                 if (sumDivisorsJ == i)
  67.                 {
  68.                     Console.WriteLine($"Приятелски числа: {i} и {sumDivisorsI}");
  69.                 }
  70.             }
  71.         }
  72.     }
  73. }
Advertisement
Add Comment
Please, Sign In to add comment