Задания
Версия для печати и копирования в MS Word
Тип 25 № 69903
i

На­пи­ши­те про­грам­му, ко­то­рая пе­ре­би­ра­ет целые числа, боль­шие 600 000, в по­ряд­ке воз­рас­та­ния и ищет среди них такие, среди де­ли­те­лей ко­то­рых есть хотя бы одно число, окан­чи­ва­ю­ще­е­ся на 7, но не рав­ное 7 и са­мо­му числу. Не­об­хо­ди­мо вы­ве­сти пер­вые 5 таких чисел, и наи­мень­ший де­ли­тель, окан­чи­ва­ю­щий­ся на 7, не рав­ный 7 и са­мо­му числу.

Фор­мат вы­во­да: для каж­до­го из 5 таких най­ден­ных чисел в от­дель­ной стро­ке сна­ча­ла вы­во­дит­ся само число, затем  — наи­мень­ший де­ли­тель, окан­чи­ва­ю­щий­ся на 7, не рав­ный 7 и са­мо­му числу. Стро­ки вы­во­дят­ся в по­ряд­ке воз­рас­та­ния най­ден­ных чисел.

Ко­ли­че­ство строк в таб­ли­це для от­ве­та из­бы­точ­но.

Ответ:

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

Ре­ше­ние.

Будем по­сле­до­ва­тель­но рас­смат­ри­вать каж­дое целое число, боль­шее 600 000. В каж­дом таком числе будем пе­ре­би­рать де­ли­те­ли числа, про­ве­ряя, окан­чи­ва­ет­ся ли де­ли­тель на 7 и равен ли он числу 7. Встре­чая пер­вый де­ли­тель числа, удо­вле­тво­ря­ю­щий усло­ви­ям за­да­чи, будем вы­во­дить на экран число и этот де­ли­тель, а также оста­нав­ли­вать пе­ре­бор де­ли­те­лей оче­ред­но­го числа, по­сколь­ку пер­вый встре­чен­ный де­ли­тель, удо­вле­тво­ря­ю­щий усло­вию за­да­чи, и будет ми­ни­маль­ным.

 

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

var

i, j, halfI: longint;

count: integer;

begin

count := 0;

i := 600001;

while (count < 5) do begin

halfI := i div 2;

for j := 2 to halfI do

if (i mod j = 0) and (j mod 10 = 7) and (j <> 7) then begin

writeln(i, ' ', j);

count := count + 1;

break;

end;

i := i + 1;

end;

end.

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

600001 437

600002 47

600003 1227

600005 217

600012 16667

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

count = 0

i = 600001

while count < 5:

halfI = i // 2

for j in range(2, halfI + 1):

if i % j == 0 and j % 10 == 7 and j != 7:

print(i, ' ', j)

count += 1

break

i += 1

 

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

c = 0

x = 600000

while c < 5:

x += 1

a = []

for d in range(17,x//2 + 1, 10):

if x % d == 0:

a.append(d)

if len(a) > 0:

c += 1

print(x, min(a))

 

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

a = 600000

count = 0

while count < 5:

a+=1

for i in range(17,a//2+1,10):

if a%i==0:

print(a, i)

count+=1

break

 

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

n, c = 600001, 0

while c < 5:

(d := next((i for i in range(17, n, 10) if n % i == 0), 0)) and (print(n, d) or (c := c + 1)); n += 1


-------------
Дублирует задание № 37130.
Источники: