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

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

На­при­мер, в диа­па­зо­не [2; 48] ровно шесть нечётных раз­лич­ных на­ту­раль­ных де­ли­те­лей имеет число 45, по­это­му для этого диа­па­зо­на вывод на экра­не долж­на со­дер­жать сле­ду­ю­щие зна­че­ния: 1 3 5 9 15 45;

в диа­па­зо­не [480; 489] ровно шесть нечётных раз­лич­ных на­ту­раль­ных де­ли­те­лей имеет число 486, по­это­му для этого диа­па­зо­на вывод на экра­не долж­на со­дер­жать сле­ду­ю­щие зна­че­ния: 1 3 9 27 81 243.

 

Ответ:

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

Ре­ше­ние.

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

 

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

var

numDel, i, j: longint;

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

begin

for i := 95632 to 95650 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 > 6 then break;

d2[numDel] := j;

end;

end;

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

end;

end.

 

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

1 3 9 10627 31881 95643

1 7 49 61 427 2989

1 5 25 1913 9565 47825

При­ме­ча­ние.

За­ме­тим, что про­грам­ма долж­на вы­ве­сти толь­ко не­чет­ные де­ли­те­ли числа. Если число не­чет­ное, то оно яв­ля­ет­ся своим не­чет­ным де­ли­те­лем и вы­во­дит­ся на экран. Если число чет­ное, то оно не яв­ля­ет­ся своим не­чет­ным де­ли­те­лем и не вы­во­дит­ся на экран. Же­ла­ю­щие могут из­ме­нить про­грам­му и вы­ве­сти на экран до­пол­ни­тель­но само число, но такая про­грам­ма не будет со­от­вет­ство­вать за­да­нию.

 

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

for num in range(95632, 95651):

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) == 6:

deliteli.sort()

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

 

При­ведём ре­ше­ние Са­ве­лия Но­во­се­ло­ва на языке Python.

for i in range(95632, 95650 + 1):

c = 0

h = []

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

if i % j == 0:

if j % 2 != 0:

c += 1

h.append(j)

if c == 6:

print(*h)


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

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