Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите написать код на питоне

... ... Ученик (79), закрыт 1 год назад
Составить программу для нахождения чисел из интервала [М, N], имеющих наибольшее количество делителей

с помощью функций
Если еще через решетки напишете что в строчке происходит - цены Вам не будет
Лучший ответ
Ксения Райт Гений (94099) 1 год назад
У Вас M и N - какие числа? Вот как будет с натуральными числами и оптимизацией по нахождению количества делителей:
 def deli(n): 
l, m = 0, int(n**0.5)
for i in range(1, m + 1):
if n % i == 0: l += 2
if m * m == n: l -= 1
return l
while True:
M, N = map(int, input('M N: ').split())
maxi, num = 0, []
for i in range(M, N + 1):
d = deli(i)
if d > maxi: maxi = d; num = [i]
elif d == maxi: num.append(i)
print('Количество делителей:', d)
print(*num)

Как видно, выводятся всё числа диапазона [M;N], для которых количество делителей максимально. Количество делителей каждого натуральное числа i определяется так: в цикле по натуральным числам j от 1 до m=√i включительно проверяется делимость i на j, если i делится на j, то количество делителей увеличивается на 2, в конце цикла проверяется условие m²=i - если имеет место равенство, количество делителей уменьшается на 1. Сложность алгоритма ~ Σ(i=M;N)√i. Для диапазонов [M;N] шириной порядка миллионов и без того оптимизированную программу надо будет оптимизировать ещё больше, иначе будет всё медленно считаться, а безо всякой оптимизации, даже, например, такой простой как у меня, вообще всё начинает виснуть, причём ни при никаких ни при миллионах, а всего лишь при скольких-то там тысячах...
Остальные ответы
Олег Меркурий Ученик (183) 1 год назад
го на кобре
... ...Ученик (79) 1 год назад
Ребят я ща заплачу от таких шуток
check box Gogoli Знаток (352) 1 год назад
 def largest_number_of_divisors(M: int, N: int) -> int: 
# Find the number with the most divisors in the interval [M, N]
max_divisors = 0
max_divisors_num = 0
for i in range(M, N+1):
divisors = 0
for j in range(1, i+1):
if i % j == 0:
divisors += 1
if divisors > max_divisors:
max_divisors = divisors
max_divisors_num = i
return max_divisors_num

# Test the function
print(largest_number_of_divisors(1, 10)) # Output: 6 (6 has the most divisors in the interval [1, 10])
print(largest_number_of_divisors(1, 20)) # Output: 18 (18 has the most divisors in the interval [1, 20])
не благодари
Похожие вопросы