С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
 Аватар для Senoki
6 / 6 / 0
Регистрация: 24.09.2021
Сообщений: 125

Задача №635. Дружественные числа

28.10.2021, 13:49. Показов 4737. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Два различных натуральных числа называются дружественными, если первое из них равно сумме делителей второго числа, за исключением самого второго числа, а второе равно сумме делителей первого числа, за исключением самого первого числа. Требуется найти все пары дружественных чисел, оба из которых принадлежат промежутку от M до N.

Входные данные:

В первой строке находятся числа M и N. 1 <= M <= N <= 1 000 000, все числа целые.

Выходные данные:

В каждой строке вывести по паре чисел через пробел. Первое число пары должно быть меньше второго. Строки должны быть отсортированы в порядке возрастания первого числа пары. Если пар дружественных чисел в промежутке нет, вывести "Absent".
Мой код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def sd(k):
    s = 0
    m = int(k**0.5)
    for i in range(1, m+1):
        if k%i == 0:
            if i**2 == k:
                s += i    
            else:
                s+=i
                s+=(k//i)
    s -= k
    return s
 
a = input().split()
n,m = int(a[0]), int(a[1])
f = 0
for i in range(n, m):
    for j in range(i+1, m+1):
        if sd(i) == j and sd(j) == i:
            print(i, j)
            f = 1
if f == 0:
    print('Absend')
Однако программа не заходит по времени в систему. Что не так?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.10.2021, 13:49
Ответы с готовыми решениями:

Дружественные числа
Дружественными числами являются два натуральных числа, таких, что каждое из них, равно сумме всех натуральных делителей другого, исключая...

Дружественные числа до 10000
Здравствуйте. Помогите с задачкой: Найти все пары дружественных чисел до 10 000. Пара дружественных чисел - это два различных натуральных...

Дружественные числа
Два натуральных числа называются «дружественными», если каждое из них равно сумме всех делителей (кроме его самого) другого (например,...

4
8 / 5 / 4
Регистрация: 25.10.2021
Сообщений: 29
28.10.2021, 14:10
Нуууу, если я правильно понимаю, то sd это поиск суммы делителей. Так вот чтобы найти все делители числа достаточно проверить числа от 1 до корня из n(n - число) и добавлять к сумме i (делитель) и n // i (не считая сам корень из n).

Добавлено через 7 минут
Да и пытаться искать для каждого числа его пару перебором - так себе идея) Для каждого числа можно однозначно найти число, равное сумме его делителей и все, что остается проверить - принадлежит ли это число из диапазону m n, и выполняется ли обратное условие.

Кликните здесь для просмотра всего текста
А вообще без примеров не очень понимаю условие, но мб такими числами только простые являются?
0
Эксперт Python
8848 / 4500 / 1864
Регистрация: 27.03.2020
Сообщений: 7,315
28.10.2021, 18:19
Senoki,
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
def fun(num):
    res = 1
    d = 2
    while d*d <= num:
        if num%d == 0:
            res += d + num//d*(d*d != num)
        d += 1
    return res 
 
m, n = map(int,input().split())
lst = set()
for i in range(m,n + 1):
    k = fun(i)
    if i < k <= n and fun(k) == i:
        lst.add((i,k))
if len(lst):
    for i in sorted(lst):
        print(*i)
else:
    print('Absent')
0
 Аватар для Senoki
6 / 6 / 0
Регистрация: 24.09.2021
Сообщений: 125
07.11.2021, 14:17  [ТС]
Gdez, все равно превышает максимальное время работы... на том же тесте
0
Эксперт Python
8848 / 4500 / 1864
Регистрация: 27.03.2020
Сообщений: 7,315
07.11.2021, 18:13
Senoki, А так?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
def primes(n):
    sieve = [True] * n 
    for i in range(3, int(n ** 0.5) + 1, 2):
        if sieve[i]:
            sieve[i * i::2 * i] = [False] * ((n - i * i - 1) // (2 * i) + 1)
    return [2] + [i for i in range(3, n, 2) if sieve[i]] 
 
 
def fact(n):
    res = []
    for d in pr:
        if d*d > n :
            break
        cnt = 0
        while not n % d:
            n //= d
            cnt += 1
        if cnt > 0:
            res.append((d, cnt))
    if n > 1:
        res.append((n, 1))
 
    return res
 
 
def divs(n):
 
    res = [1]
    for v, i in fact(n):
        res += [x*v**k for k in range(1,i+1) for x in res]
    return sum(res) - n
 
 
 
m, n = map(int,input().split())
pr = primes(n)
lst = set()
 
for i in range(m,n + 1):
    k = divs(i)
    if i < k <= n and divs(k) == i:
        lst.add((i,k))
if len(lst):
    for i in sorted(lst):
        print(*i)
else:
    print('Absent')
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.11.2021, 18:13
Помогаю со студенческими работами здесь

Дружественные числа
Программа должна вывести слово 'YES', если полученные числа – дружественные, и слово 'NO' в противном случае.

Дружественные числа
Два натуральных числа называются ''дружественными'' , если каждое из них равно сумме всех делителей другого, за исключением его...

Задача про дружественные числа
Назовём две несократимые дроби p/q и r/s дружественными, если |p-r| ⋅ |q-s|=2. Требуется выстроить все дроби, у которых числитель и...

Числа близнецы, дружественные числа, пифагоровы числа и числа Армстронга
Здравствуйте, помогите написать программу где в заданном диапазоне программа находит: числа близнецы, дружественные числа, пифагоровы числа...

Числа близнецы, дружественные числа, пифагоровы числа и числа амстронга
Здравствуйте, помогите написать программу где в заданном диапазоне программа находит: числа близнецы, дружественные числа, пифагоровы числа...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru