Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- В задачата се говори за приятелски числа, които са такива, при които сумата от делителите на едното число е равна на второто число, а сумата от делителите на второто число е равна на първото.
- Пример:
- Числата 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}");
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment