Объяснение:
Здесь полная аналогия с тем, как мы складываем в обычной, десятичной системе. Объясню лучше на примере.
Мы знаем, что можно складывать числа "в столбик":
24
+13
37
то есть строго разряд под разрядом. Но что мы делаем, когда в одном разряде получается число, больше 9? Правильно, переносим десяток в старший разряд!
15
+19
24 (не 214!)
Здесь та же ситуация, отличие только в том, что максимальная цифра в разряде равна 7 (как в нашей десятичной записи максимальная цифра в записи разряда равна 9, а следующее число - 10 - уже состоит из двух цифр в записи - 1 и 0). Значит, если мы хотим записать число 8 в восьмеричной записи, мы напишем это как 10₈ (нижний индекс показывает систему счисления)
А теперь попробуем сложить два числа в восьмеричной системе:
21₈
+ 16₈
37₈
Разряд под разрядом, ничего сложно. А давайте возьмем пример поинтереснее:
77₈
+ 77₈
7₈ + 7₈ = 16₈, это значит, что в младшем разряде мы напишем 6, а десятки припишем в старший разряд.
1
77₈
+ 77₈
*6
Так как 7₈ + 7₈ + 1₈ = 17₈, то 7 записываем в свой, соответствующий, разряд, а единицу в старший, получив при этом ответ 176₈
В правильности ответа можем убедиться, переведя это все в десятичную запись: 77₈ = 63, 176₈ = 126, 63 + 63 = 126, все верно.
Единственный дискомфорт при таком методе - непривычные результаты сложения. Например, 7 + 7 = 14 (в десятичной записи), но в примере выше 7₈ + 7₈ = 16₈. Поэтому тут нужно быть аккуратным!
Поделитесь своими знаниями, ответьте на вопрос:
program task; var n, i, power, copy: integer; flag: boolean; begin readln( n ); copy := n; i := 2; flag := false; while copy <> 1 do begin while copy mod i <> 0 do i := i + 1; power := 0; while ( copy mod i = 0 ) do begin copy := copy div i; power := power + 1; end; if flag then write( '*' ) else flag := true; if power > 1 then write( i, '^', power ) else write( i ); i := i + 1; end; writeln; end. переведите на питон
power = 0
n = int(input())
copy = n
i = 2
flag = False
while copy != 1:
while copy % i != 0: i += 1
power = 0
while copy % i == 0:
copy //= i
power += 1
if flag: print('*', end = '')
else: flag = True
if power > 1: print(str(i) + '^' + str(power), end = '')
else: print(i, end = '')
i += 1