Задания
Версия для печати и копирования в MS Word

На­пи­ши­те про­грам­му, ко­то­рая ищет среди целых чисел, при­над­ле­жа­щих чис­ло­во­му от­рез­ку [568 023; 569 230], число, име­ю­щее мак­си­маль­ное ко­ли­че­ство раз­лич­ных на­ту­раль­ных де­ли­те­лей, если таких чисел не­сколь­ко  — най­ди­те ми­ни­маль­ное из них. Вы­ве­ди­те на экран ко­ли­че­ство де­ли­те­лей та­ко­го числа и само число.

На­при­мер, в диа­па­зо­не [2; 48] мак­си­маль­ное ко­ли­че­ство раз­лич­ных на­ту­раль­ных де­ли­те­лей имеет число 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 = HashSet::new();

    for i in 1..=(n as f32).sqrt() as usize {

        if n % i == 0 {

            divs.insert(i);

            divs.insert(n / i);

        }

    }

    divs.len()

}

Раздел кодификатора ФИПИ: