0 / 0 / 0
Регистрация: 25.11.2021
Сообщений: 6

Найти частоту нахождения дружественных чисел

25.11.2021, 23:05. Показов 1391. Ответов 7

Студворк — интернет-сервис помощи студентам
Задачу нужно решить вложенными функциями. Даны дружественные числа от 1 до 10000: 220,284,1184,1210, 2620,2924, 5020,5564,6232,6368. Нужно распечатать для диапазонов чисел (1..1000, 1001..2000, 2001..3000…4001...5000,5001...6000,6001. ..7000,7001..8000,80 01...9000,9001....10000)) частоту нахождения дружественные чисел. Подскажите как это сделать?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.11.2021, 23:05
Ответы с готовыми решениями:

Найти частоту нахождения совершенных чисел
Дан такой код, он находит совершенные числа, нужно распечатайте для диапазонов чисел (1..1000, 1001..2000,...

Найти все пары натуральных дружественных чисел, меньших 10 000
Ограничение времени 300 секунд Ограничение памяти 64Mb Ввод стандартный ввод или input.txt Вывод стандартный вывод или output.txt ...

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

7
3750 / 1944 / 613
Регистрация: 21.11.2021
Сообщений: 3,706
26.11.2021, 02:43
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
def print_amicable_numbers_frequency_of_occurrence_table(begin, end, step):
    # Валидация диапазона и шага
    if not begin < end:
        raise ValueError("Начало диапазона должно быть меньше конца.")
    if not  begin >= 1:    
        raise ValueError("Начало диапазона должно быть не меньше 1.")
    if not end <= 10000:    
        raise ValueError("Конец диапазона должен быть не больше 10000.")
    if not step < end - begin:    
        raise ValueError("Шаг должен быть меньше длины диапазона.")
    if not step > 1:
        raise ValueError("Шаг должен быть больше единицы.")    
    if not isinstance(begin, int):
        raise TypeError("Начало диапазона должно быть целым.")
    if not isinstance(end, int):
        raise TypeError("Конец диапазона должен быть целым.")
    if not isinstance(step, int):
        raise TypeError("Шаг диапазона должен быть целым.")
    #===========================================================================
    def print_amicable_numbers_frequency_of_occurrence_in_range(beg, en):
        #=======================================================================
        def count_amicable_numbers_in_range(beg, en):
            amicable_numbers = (220, 284, 1184, 1210, 2620, 2924, 5020, 5564, 6232, 6368)
        
            counter = 0
            for a in amicable_numbers:
                if beg <= a <= en:
                    counter += 1
            return counter
        #=======================================================================
        n = count_amicable_numbers_in_range(beg, en)
        fr = n/step
        print(format(beg, '>5'), '...', format(en, '>5'), '\t', format(fr, '0.3f'))
    #===========================================================================
    print("\nЧастота появления дружественных чисел в диапазонах:")
 
    for i in range(begin, end, step):
        beg = i
        en  = i + step - 1
        print_amicable_numbers_frequency_of_occurrence_in_range(beg, en)    
#===========================================================================
begin = int(input('begin = '))
end   = int(input('end   = '))
step  = int(input('step  = '))
print_amicable_numbers_frequency_of_occurrence_table(begin, end, step)
1
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,320
26.11.2021, 06:34
jugold,
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
from math import ceil
 
def dsum(num):
    res = 1
    for k in range(2, int(num**.5) + 1):
        if num % k == 0:
            res += k + num//k
    return res
 
 
my_list = [0]*11
my_set = set()
for i in range(1, 11):
 
    for j in range(1000*i - 999, 1000*i+1):
        if j not in my_set:
            ssum1 = dsum(j)
 
            if ssum1 < 10001:
                ssum2 = dsum(ssum1)
                if ssum2 == j and ssum1 != ssum2:
                    m = ceil(ssum1/1000)
                    my_list[i] += 1
                    my_list[m] += 1
                    my_set |= {ssum1, ssum2}
 
for i in range(1, 11):
    print(f'({i*1000-999}, {i*1000}): {my_list[i]}')
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38210 / 21143 / 4313
Регистрация: 12.02.2012
Сообщений: 34,756
Записей в блоге: 14
26.11.2021, 08:53
idealist, ох...
1
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
26.11.2021, 09:19
Python
1
2
3
4
5
6
a = [220, 284, 1184, 1210, 2620, 2924, 5020, 5564, 6232, 6368]
d = dict.fromkeys(range(10), 0)
for x in a:
    d[x // 1000] += 1
for k, v in d.items():
    print(k*1000+1, (k+1)*1000, v)
0
0 / 0 / 0
Регистрация: 25.11.2021
Сообщений: 6
26.11.2021, 11:50  [ТС]
Скажите а можно решить без функции amicamble,dict,dsum просто мы их пока не проходили, нужно решить вложенными функциями for или while....
0
Status 418
Эксперт Python
4584 / 2350 / 601
Регистрация: 26.11.2017
Сообщений: 5,262
Записей в блоге: 3
26.11.2021, 11:59
Python
1
2
3
4
5
6
a = [220, 284, 1184, 1210, 2620, 2924, 5020, 5564, 6232, 6368]
d = [0] * 10
for x in a:
    d[x // 1000] += 1
for i in range(10):
    print(i * 1000 + 1, (i + 1) * 1000, d[i])
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,320
26.11.2021, 12:05
Лучший ответ Сообщение было отмечено jugold как решение

Решение

jugold, в условии про "вложенные функции"

Добавлено через 1 минуту
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
from math import ceil
 
my_dict = {1000*i: 0 for i in range(1,11)}
my_set = set()
for i in range(1, 11):
 
    for j in range(1000*i - 999, 1000*i+1):
        if j not in my_set:
            ssum1 = ssum2 = 1
            for k in range(2, int(j**.5) + 1):
                if j % k == 0:
                    ssum1 += k + j//k
            
            if ssum1 < 10001:
                for k in range(2, int(ssum1**.5) + 1):
                    if ssum1 % k == 0:
                        ssum2 += k + ssum1//k
                
                if ssum2 == j and ssum1 != ssum2:
                    m = ceil(ssum1/1000)*1000
                    my_dict[1000*i] += 1
                    my_dict[m] += 1
                    my_set |= {ssum1, ssum2}
 
for elem in my_dict:
    print(f'({elem-999}, {elem}): {my_dict[elem]}')
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.11.2021, 12:05

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

Новые блоги и статьи
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0) Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона Уважаемые коллеги! В продолжение. . .
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
Текстовый слайдер с нумерацией страниц и кроссбраузерность.
russiannick 18.07.2026
Один мой друг написал текстовый слайдер с нумерацией страниц. Сегодня я расскажу как он умудрился подружить его с кроссбраузерностью. Очевидно сложно угодить с шириной каждому браузеру. Один крадет. . .
Грибы - это мемы, дерево - это человек. Применение микоризной модели к теории меметики Докинза.
anaschu 18.07.2026
Меметический изоморфизм теории «всего»: Грибная сукцессия как модель эволюции идей Докинза Базовый код системы ОДУ микоризной сукцессии описывает не просто биологию, а универсальную. . .
Грибы - это корпорации, деревья - это государства. Механизм массонского захвата власти
anaschu 18.07.2026
Макроэкономический изоморфизм теории «всего»: Грибная сукцессия как модель транснационального капитализма Базовый код системы ОДУ микоризной сукцессии описывает не просто биологию, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru