Напишите программу, которая перебирает целые числа, большие 3 000 000, в порядке возрастания и ищет среди них числа, представимые в виде произведения ровно двух простых множителей, не обязательно различных, каждый из которых содержит в своей записи либо цифру 1, либо цифру 3. В ответе в первом столбце таблицы запишите первые 5 найденных чисел в порядке возрастания, а во втором столбце — для каждого числа наибольший из соответствующих им найденных множителей. Количество строк в таблице для ответа избыточно.
Решение:
Решение на Python:
# Проверяем простоту числа.
def pr(x):
for i in range(2, int(x**0.5)+1):
if x % i == 0:
return False
return True
# Находим делители.
def d(x):
dels = []
for i in range(2, int(x**0.5)+1):
if x % i == 0:
dels.append(i)
dels.append(x//i)
return dels
for x in range(3000001, 4000000):
dels = d(x)
delsp = [d for d in dels if pr(d)]
if len(delsp) == 2:
if delsp[0]*delsp[1] == x:
if str(delsp[0]).count('1') > 0 or str(delsp[0]).count('3') > 0:
if str(delsp[1]).count('1') > 0 or str(delsp[1]).count('3') > 0:
print(x, max(dels))
Ответ:
| 3000001 | 3517 |
| 3000009 | 1000003 |
| 3000013 | 3881 |
| 3000023 | 230771 |
| 3000031 | 22901 |
Ответ: