Поиск по этому блогу

пятница, 7 февраля 2025 г.

kompege.ru № 5899

 Автомат получает на вход трёхзначное число. По этому числу строится новое число по следующим правилам:

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)

Комментариев нет:

Отправить комментарий