Автомат получает на вход трёхзначное число. По этому числу строится новое число по следующим правилам:
1) Из цифр, образующих десятичную запись N, строятся все возможные двузначные числа (числа не могут начинаться с нуля).
2) Из получившихся двузначных чисел выбираются только те, которые являются простыми.
Каждую цифру трехзначного числа можно использовать ровно столько раз, сколько она встречается в этом числе. К примеру, возьмем число 123. Из него можно составить числа: 12, 13, 21, 31, 23, 32.
Для какого наибольшего N количество выбранных простых чисел будет максимальным?
Решение (с использованием библиотеки itertools и множеств)
from itertools import* # грузим библиотеку
mk=0 # максимальное количество простых чисел
mi=0 # число с максимальным количество простых чисел
for n in range(100,1000): #перебираем трехзначные числа
b=set() #для отсечения повторяющихся двузначных заводим множество
k=0 #счетчик простых чисел
for i in permutations(str(n),2): #генерируем все двузначные сочетания цифр трехзначного числа
a=''.join(i) #собираем цифры в строку
if int(a)>9: #это двузначное число
b.add(int(a)) #добавляем во множество, чтобы исключить повторения
c=list(b) #множество переводим в список двузначных чисел
#проверяем элементы списка на простоту
for x in c:
fg=True
for d in range(2,x):
if x%d==0:
fg=False
if fg:
k+=1
if k>=mk:
mk=k
mi=n
print(mi)
Решение без библиотек и множеств
mk=0
mi=0
for n in range(100,1000):
k=0
c=[]
for i in str(n):
for j in str(n):
a=i+j
if int(a)>9 and c.count(int(a))==0:
c.append(int(a))
for x in c:
fg=True
for d in range(2,x):
if x%d==0:
fg=False
if fg:
k+=1
if k>=mk:
mk=k
mi=n
print(mi,mk)
Комментариев нет:
Отправить комментарий