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

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

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

1 2 7 14

 

Ответ:

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

Ре­ше­ние.

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

 

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

var

x, numDel, i, j: longint;

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

begin

for i := 489421 to 489440 do begin

numDel := 0;

for j := 1 to i do begin

if i mod j = 0 then begin

numDel := numDel + 1;

if numDel > 4 then break;

d[numDel] := j;

end;

end;

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

end;

end.

 

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

1 19 25759 489421

1 2 244711 489422

1 13 37649 489437

 

При­ведём дру­гое ре­ше­ние на языке Python.

maxi = 0

d = [1 for i in range(5)]

for i in range(489421, 489441):

numdel = 0

for j in range(1, i + 1):

if i % j == 0:

numdel += 1

if numdel > 4:

break

d[numdel] = j

if numdel == 4:

print(d[1], d[2], d[3], d[4])

 

При­ведём ре­ше­ние Да­ни­и­ла По­та­по­ва на языке Python.

def get_delimiters(num: int) -> set:

delimiter = 1

result = set()

while delimiter <= num ** 0.5:

if num % delimiter == 0:

result.add(delimiter)

result.add(num // delimiter) # До­бав­ля­ем вто­рой де­ли­тель

delimiter += 1

return result

for i in range(489421, 489440):

if len(get_delimiters(i)) == 4:

print(*sorted(get_delimiters(i)))

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