Максимальное количество делителей числа в интервале с [ M; N ]
uses crt;
function KolDel(n:longint):integer;//функция для подсчета делителей
var i,k:integer;
begin
k:=1;//пока делитель 1, само число
for i:=1 to round(sqrt(n))do//от 1 до крня из числа(дальше нет смысла проверять)
if n mod i=0 then k:=k+1;//если данное число делится на очередное, прибавляем
KolDel:=k;//присваиваем значение функции
end;
var m,n,i:longint;
mx:integer;
begin
clrscr;
repeat//вводим интервал с проверкой
writeln('Ведите интервал вычислений n>m');
readln(m,n);
until n>m;
mx:=1;//пока максимальное число делителей=1
for i:=m to n do//идем по интервалу
if KolDel(i)>mx then mx:=KolDel(i);//ищем сколько максимально есть делителей у этих чисел
writeln('Максимальное количество делителе=',mx,' имеют:');
for i:=m to n do//снова идем по интервалу
if KolDel(i)=mx then write(i,' ');//если у числа максимальное число делителей,
//выводим его на экран
readln
end.
from math import sqrt
x = int(input('M : '))
y = int(input('N : '))
def KolDel(N):
k = 1
N = round(sqrt(N))
for i in N:
if N % i=0
k=k+1
KolDel(N) = k
return k
Помогите перевести с Паскаля на Питон
Ответы (2 шт):
dividers = [] #список для делителей.
for divider in range(M, N):
if divider % X == 0: #проверяем делимость
dividers.append(divider) #добавляем делитель
print(len(dividers)) #выводим длину списка
ну а в общем, я не понял, что Вы подразумеваете под 'максимальное количество делителей'. он всегда одинаков в статическом диапазоне для определённого Х.
Для тех, кто не понял задачу, подробнее можно почитать здесь. Так же тут есть формулы для более оптимального поиска кол-ва делителей используя простые числа.
https://zaochnik.com/spravochnik/matematika/delimost/nahozhdenie-vseh-delitelej-chisla/
Ваша функция KolDel работает не верно. Я переписала алгоритм, который работает верно, но он не оптимален. В качестве проверки можно использовать число 60 - имеет 12 делителей.
import math
def countDividers(n):
if n <= 0: return 0 # условно будем так считать
if n == 1: return 1
k = 2 # делителей изначально 2, само число и единица.
for i in range(2, round(math.sqrt(n)) + 1):
if n % i == 0:
k += 1 if i == n // i else 2 #считаем и делитель и частное, если они не совпадают
return k
def maxDividersCountAtRange(m , n):
if m > n : m, n = n, m # меняем местами если m > n, только для учебных програм
maxDivs = 0 #
numberWithMaxDivs = [] #список чисел с максимальным числом делителей
for i in range(m, n): #идем по интервалу
d = countDividers(i) #записываем результат в переменную для оптимизации
if d > maxDivs: #ищем максимум
maxDivs = d
numberWithMaxDivs = [] #очищаем список при изменении максимума
if d == maxDivs:
numberWithMaxDivs.append(i) #добавляем число в список
return maxDivs, numberWithMaxDivs
print(maxDividersCountAtRange(20,80))
Ввод и красивый вывод можно дописать самостоятельно
Питон знаю мало, так что правки приветствуются