• Предмет: Информатика
  • Автор: catmdsf
  • Вопрос задан 3 месяца назад

Разложение на чётнопростые
В этой задаче рассматриваются только чётные целые числа.

Чётное натуральное число n
будем называть чётнопростым числом, если его нельзя представить в виде произведения двух чётных чисел. Например, числа 2
и 6
— чётнопростые.

Очевидно, что каждое число либо является чётнопростым, либо разлагается в произведение чётнопростых. Но такое разложение на чётнопростые не всегда единственно.

Входные данные

Дано чётное натуральное n≤109
.

Выходные данные

Если число n
чётнопростое, выведите слово prime. Если это число единственным образом разлагается в произведение двух и более чётнопростых, то выведите слово single, а в следующей строке выведите разложение этого числа на чётнопростые множители. Если число допускает несколько различных разложений на чётнопростые, то выведите слово many, а в следующих двух строках выведите два каких-нибудь различных разложения числа на чётнопростые множители.

Примеры
Ввод
Вывод
6
prime
4
single
2 2
ПРОГРАММИРОВАНИЕ НА ПАЙТОН ,ДАЮ 40баллов


p15: неплохая задача. Споткнулся на фразе "Но такое разложение на чётнопростые не всегда единственно". как раз оно единственно, потому что надо разложить до четнопростых. Хорошо. Допустим число 48. 2*24 - это не ответ, потому что 24 не разложено до четнопростого. 2*2*2*6 - это ответ, потому что разложено до четнопростых, но разложение единственно. Нельзя разложить по-другому.

Ответы

Ответ дал: archery
0

def calcEvenPrimes(n):

   print(n)

   if n < 0 or n > 109 or n % 2 != 0:

       print("input error")

       return

   if n % 4 != 0:

       print("prime")

       return

   primes = [3,5,7,11,13,17,19,23,29,31,37,41]

   dividers = []

   for p in primes:

       if (n//4) % p == 0:

           dividers.append(p)

   s = f"{'single' if len(dividers) <= 1 else 'many'}\n"

   t = n//2

   while t % 2 == 0:

       s += "2 "

       t //= 2

   else:

       s += f"{t*2}"

   if len(dividers) > 1:

       s += ", "

       t = n//4

       while t % 2 == 0:

           s += "2 "

           t //= 2

       else:

           s += f"{2*dividers[0]} {2*t//dividers[0]}"

   print(s)

# примеры использования

calcEvenPrimes(6)

calcEvenPrimes(4)

calcEvenPrimes(8)

calcEvenPrimes(12)

calcEvenPrimes(60)

calcEvenPrimes(96)

calcEvenPrimes(102)

calcEvenPrimes(24)


p15: 96
many
2 48, 4 24
[2, 3]
но 48 и 24 это не четнопростое.
p15: И что в скобках?
p15: Как и 4
archery: нда этого ньюанса не заметила
p15: mn=[]
n=int(input('введите четное число: '))
if n%4!=0: print('prime')
else:
for i in range(2,int(n**.5)+1,4):
if n%i==0: mn.append((i,n//i))
print('many' if len(mn)-1 else 'single')
print(*mn)

Она разлагает и первое точно четнопростое, но я до конца не понял с однозначностью разложения на четнопростые.
archery: если помогло, то выбери лучшим ответом, плиз
Вас заинтересует