Напишите программу, которая перебирает целые числа, большие 5 000 000, в порядке возрастания и ищет среди них числа, представимые в виде произведения ровно трёх простых множителей, необязательно различных, каждый из которых содержит в своей записи хотя бы одну цифру 2 или 3. В ответе запишите первые пять чисел в порядке возрастания.
Ответ:
Приведём решение на языке Python.
def cislo2or3(i):
return (str(i).count('2')+str(i).count('3'))>0
count = 0
n = 5000001
while count < 5:
delitel = []
k = 2
t = n
while t > 1:
while t%k == 0:
delitel.append(k)
t //=k
k+=1
if len(delitel) == 3:
if cislo2or3(delitel[0]) and cislo2or3(delitel[1]) and cislo2or3(delitel[2]):
print(n)
count += 1
n += 1
Ответ: 5000012 5000036 5000042 5000043 5000082.
Приведём решение Сергея Донец на языке PascalABC.NET.
uses School;
begin
var n := 5_000_001;
var k := 0;
while k < 5 do begin
var fs := n.Factorize;
if (fs.Count = 3) and fs.All(f-> f.Digits.Any(d-> d in [2, 3]))
then begin k+=1;Println(n); end;
n += 1; end;
end.

