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

На­пи­ши­те про­грам­му, ко­то­рая ищет среди целых чисел, при­над­ле­жа­щих чис­ло­во­му от­рез­ку [110203; 110245], числа, име­ю­щие ровно че­ты­ре раз­лич­ных чётных на­ту­раль­ных де­ли­те­ля (при этом ко­ли­че­ство нечётных де­ли­те­лей может быть любым). Для каж­до­го най­ден­но­го числа за­пи­ши­те эти че­ты­ре де­ли­те­ля в че­ты­ре со­сед­них столб­ца на экра­не с новой стро­ки. Де­ли­те­ли в стро­ке долж­ны сле­до­вать в по­ряд­ке воз­рас­та­ния.

На­при­мер, в диа­па­зо­не [2; 16] ровно че­ты­ре чётных раз­лич­ных на­ту­раль­ных де­ли­те­ля имеют числа 12 и 16, по­это­му для этого диа­па­зо­на вывод на экра­не долж­на со­дер­жать сле­ду­ю­щие зна­че­ния:

2 4 6 12

2 4 8 16

 

Ответ:

Спрятать решение

Ре­ше­ние.

Решим за­да­чу пе­ре­бо­ром. Будем про­ве­рять ко­ли­че­ство де­ли­те­лей каж­до­го числа из диа­па­зо­на, если их ко­ли­че­ство равно четырём  — за­пи­сы­ва­ем их в дву­мер­ный мас­сив d. После этого вы­во­дим эти де­ли­те­ли на экран в новой стро­ке.

 

При­ведём ре­ше­ние на языке Pascal.

var

numDel, i, j: longint;

d2: array[1..4] of longint;

begin

for i := 110203 to 110245 do begin

numDel := 0;

for j := 1 to i do begin

if (i mod j = 0) and (j mod 2 = 0) then begin

numDel := numDel + 1;

if numDel > 4 then break;

d2[numDel] := j;

end;

end;

if numDel = 4 then writeln(d2[1], ' ', d2[2], ' ', d2[3], ' ', d2[4]);

end;

end.

 

В ре­зуль­та­те ра­бо­ты про­грам­ма долж­на вы­ве­сти сле­ду­ю­щее:

2 4 55102 110204

2 14 15746 110222

2 6 36742 110226

2 22 10022 110242

 

При­ведём ре­ше­ние Ви­та­са Ре­мей­ки­са на языке Python.

for num in range(110203, 110246):

deliteli = []

for d in range(1, int(num**0.5) + 1):

if num % d == 0:

if d % 2 == 0:

deliteli.append(d)

if num//d != d and num//d % 2 == 0:

deliteli.append(num//d)

if len(deliteli) == 4:

deliteli.sort()

print(deliteli[0],deliteli[1],deliteli[2],deliteli[3])

 

При­ведём ре­ше­ние Ми­ха­и­ла Глин­ско­го на языке Python.

for x in range(110203,110245+1):

n={x}

for y in range(2,round(x**0.5)+1):

if x%y == 0 and y%2 == 0:

n.add(y)

if x%y == 0 and (x//y)%2 == 0:

n.add(x//y)

if len(n) > 4:

break

n = sorted(n)

if len(n)==4:

print(*n)

 

При­ведём ре­ше­ние Ильи Ан­дри­а­но­ва на языке Python.

def divisors(x):

div = []

for j in range(1, int(x**0.5)+1):

if x % j == 0:

div.append(j)

div.append(x // j)

return sorted(set(div))

for x in range(110203, 110245+1):

div = divisors(x)

chet = [x for x in div if x % 2 == 0]

if len(chet) == 4:

print(*chet)


Аналоги к заданию № 27854: 27855 27856 Все

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