Разложение на чётнопростые
В этой задаче рассматриваются только чётные целые числа.
Чётное натуральное число n
будем называть чётнопростым числом, если его нельзя представить в виде произведения двух чётных чисел. Например, числа 2
и 6
— чётнопростые.
Очевидно, что каждое число либо является чётнопростым, либо разлагается в произведение чётнопростых. Но такое разложение на чётнопростые не всегда единственно.
Входные данные
Дано чётное натуральное n≤109
.
Выходные данные
Если число n
чётнопростое, выведите слово prime. Если это число единственным образом разлагается в произведение двух и более чётнопростых, то выведите слово single, а в следующей строке выведите разложение этого числа на чётнопростые множители. Если число допускает несколько различных разложений на чётнопростые, то выведите слово many, а в следующих двух строках выведите два каких-нибудь различных разложения числа на чётнопростые множители.
Примеры
Ввод
Вывод
6
prime
4
single
2 2
ПРОГРАММИРОВАНИЕ НА ПАЙТОН ,ДАЮ 40баллов
Answers & Comments
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)
many
2 48, 4 24
[2, 3]
но 48 и 24 это не четнопростое.
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)
Она разлагает и первое точно четнопростое, но я до конца не понял с однозначностью разложения на четнопростые.