это два натуральных числа, таких, что сумма всех делителей одного числа (меньших самого этого числа) равна другому числу, и наоборот.
Используйте функцию, которая вычисляет сумму делителей числа
Найдите все пары дружественных чисел, каждое из которых меньше 10000
Python
Дружественные числа Python
def divisors(n):
yield 1
i = 2
while i * i <= n:
d, r = divmod(n, i)
if r == 0:
yield i
if d == i:
break
yield d
i += 1
sums = [sum(divisors(i)) for i in range(1, 10000)]
for i in range(1, 10000):
for j in range(i + 1, 10000):
if sums[i - 1] == j and sums[j - 1] == i:
print(i, j)
https://www.youtube.com/watch?v=TDX4-I2Jbug&list=PLmlK0mnaGB2ZGmBCBcHm0eic2m7GSFJIO
yield 1
i = 2
while i * i <= n:
d, r = divmod(n, i)
if r == 0:
yield i
if d == i:
break
yield d
i += 1
sums = [sum(divisors(i)) for i in range(1, 10000)]
for i in range(1, 10000):
for j in range(i + 1, 10000):
if sums[i - 1] == j and sums[j - 1] == i:
print(i, j)
https://www.youtube.com/watch?v=TDX4-I2Jbug&list=PLmlK0mnaGB2ZGmBCBcHm0eic2m7GSFJIO
Димарик Журавлёв
Что хранится в переменной d?
https://ideone.com/kpvL0A
Там написал до 6000, потому, чтобы на идеоне сработало.
При 10000 - времени не хватает.
У меня на компе для 10000 уходит около 30 секунд.
------------
Копия где ~~~~ = 4 пробела.
"""
Дружественные числа
это два натуральных числа, таких,
что сумма всех делителей одного числа (меньших самого этого числа)
равна другому числу, и наоборот.
Используйте функцию, которая вычисляет сумму делителей числа
Найдите все пары дружественных чисел, каждое из которых меньше 10000
Python 3.7
Для 10000 у меня на компе работает 25 секунд.
"""
def sum_del(a):
~~~~summ = 0
~~~~for i in range(1, a//2+2):
~~~~~~~~if a/i == a//i:
~~~~~~~~~~~~summ += i
~~~~return summ
n = 1
m = 10000
cnt = (m-n+1)//40
ind = []
sd = []
pairs = []
for i in range(n,m+1):
~~~~ind.append(i)
~~~~sd.append(sum_del(i))
~~~~if not i%cnt:
~~~~~~~~print('.',end='')
print()~~~~
for i in range(m-n+1):
~~~~for j in range(i, m-n+1):
~~~~~~~~#if n+i == sd[j] and n+j == sd[i]:# так, если совершенные числа тоже учитывать
~~~~~~~~if n+i == sd[j] and n+j == sd[i] and sd[j] != sd[i]:# так, если совершенные числа не учитывать
~~~~~~~~~~~~pairs.append((n+i, sd[j]+j-i))
~~~~if not i%cnt:
~~~~~~~~print('-',end='')
print()~~~~
for a in pairs:
~~~~print(*a, sep=', ')
PS
По-моему там лишние, ненужные переменные остались, сами уберите, если мешают.
Там написал до 6000, потому, чтобы на идеоне сработало.
При 10000 - времени не хватает.
У меня на компе для 10000 уходит около 30 секунд.
------------
Копия где ~~~~ = 4 пробела.
"""
Дружественные числа
это два натуральных числа, таких,
что сумма всех делителей одного числа (меньших самого этого числа)
равна другому числу, и наоборот.
Используйте функцию, которая вычисляет сумму делителей числа
Найдите все пары дружественных чисел, каждое из которых меньше 10000
Python 3.7
Для 10000 у меня на компе работает 25 секунд.
"""
def sum_del(a):
~~~~summ = 0
~~~~for i in range(1, a//2+2):
~~~~~~~~if a/i == a//i:
~~~~~~~~~~~~summ += i
~~~~return summ
n = 1
m = 10000
cnt = (m-n+1)//40
ind = []
sd = []
pairs = []
for i in range(n,m+1):
~~~~ind.append(i)
~~~~sd.append(sum_del(i))
~~~~if not i%cnt:
~~~~~~~~print('.',end='')
print()~~~~
for i in range(m-n+1):
~~~~for j in range(i, m-n+1):
~~~~~~~~#if n+i == sd[j] and n+j == sd[i]:# так, если совершенные числа тоже учитывать
~~~~~~~~if n+i == sd[j] and n+j == sd[i] and sd[j] != sd[i]:# так, если совершенные числа не учитывать
~~~~~~~~~~~~pairs.append((n+i, sd[j]+j-i))
~~~~if not i%cnt:
~~~~~~~~print('-',end='')
print()~~~~
for a in pairs:
~~~~print(*a, sep=', ')
PS
По-моему там лишние, ненужные переменные остались, сами уберите, если мешают.
Владислав Вадимович
1, 1 такой же ответ?
Похожие вопросы
- Гладкие числа. Python
- Заполнить двухмерный список случайными числами python
- Решите уравнение в натуральных числах Python
- Есть ли способ вывести случайное число не используя модуль random в python
- Python Как сделать так чтобы после сгенерированного числа оно не повторялось?
- Дан список чисел. Нужно посчитать количество их "пар" (т.е. "1 1 1 1 1" = 10, "1 2 3 2 3" = 2 и т.д.) (Python)
- Python задача "Игра с числами"
- Задача 10. Игра «Компьютер угадывает число» язык кода Python помогите пожалуйста
- Программа на Python, Простые Числа
- Напишите код по перебору числа на Python.