Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [568 023; 569 230], число, имеющее максимальное количество различных натуральных делителей, если таких чисел несколько — найдите минимальное из них. Выведите на экран количество делителей такого числа и само число.
Например, в диапазоне [2; 48] максимальное количество различных натуральных делителей имеет
10 48
Ответ:
Решим задачу перебором. Будем проверять количество делителей каждого числа из диапазона, если их количество наибольшее — записываем количество делителей и само число в заранее объявленные переменные. После этого выводим эти числа на экран.
Приведём решение на языке Pascal.
var
minNum, numDel, maxDel, i, j: longint;
begin
minNum := 0;
maxDel := 0;
for i := 568023 to 569230 do begin
numDel := 2;
for j := 2 to i div 2+1 do begin
if (i mod j = 0) then begin
numDel := numDel + 1;
end;
end;
if (numDel > maxDel) then begin
maxDel := numDel;
minNum := i;
end;
end;
writeln(maxDel, ' ', minNum);
end.
В результате работы программа должна вывести следующее:
144 568260
Приведём решение на языке Python.
mn=0
m=0
for i in range(568023,569231):
n=2
for j in range(2,i//2+1):
if i%j==0:
n+=1
if n>m:
m=n
mn=i
print(m,mn)
Приведём решение Клушина Дмитрия на языке Python.
m=0
g=0
for x in range(568023,569231):
k=0
for i in range(1,int(x**0.5)):
if x%i==0:
k+=2
if int(x**0.5)*int(x**0.5)==x:
k+=1
if k>m:
m=k
g=x
print(m,g)
Приведём решение Юрия Красильникова на языке Python.
def koldel(n):
d = set()
k = 1
while k**2 <= n:
if n%k == 0: d |= {k,n//k}
k += 1
return len(d)
kd = [koldel(n) for n in range(568023,569230+1)]
print(max(kd), kd.index(max(kd)) + 568023)
Приведём решение Николая Проклова на языке Rust.
use std::collections::HashSet;
fn main() {
let mut desired_number: usize = 0;
let mut max_div_amount: usize = 0;
for i in 568_023..=569_230 {
let i_div_amount: usize = div_amount(i);
if i_div_amount > max_div_amount {
max_div_amount = i_div_amount;
desired_number = i;
}
}
println!("{max_div_amount} {desired_number}");
}
fn div_amount(n: usize) -> usize {
let mut divs: HashSet for i in 1..=(n as f32).sqrt() as usize { if n % i == 0 { divs.insert(i); divs.insert(n / i); } } divs.len() }

