Как удалить некоторые напечатанные символы?
Вообщем, такая проблема, надо разложить целое число N на простые множители и вывести результат в порядке возрастания, указав степень числа (т. Е. Выводить не 2 2 2, а 2 ^ 3). Если число в 1 степени, степень указывать не надо. Мой код:
a = []
def pr(m):
d = 2
from math import sqrt
while d <= int(sqrt(m)):
if m%d == 0:
return d
d += 1
return 1
n = int(input())
f = 1
while f == 1:
d = int(pr(n))
if d != 1:
a.append(d)
n = int(n/d)
else:
f = 0
a.append(n)
k, n = 2, max(a)
if k == 1:
k = k+1
if k == 0:
k = k+2
r=[]
for x in range(k,n+1):
i=2
while i*i<=x:
if x%i==0:
break
i+=1
else:
r.append(x)
t = []
for g in r:
if g in a:
t.append(g)
for l in t:
u = []
e = a.count(l)
print(l, '^', e, "*", end=" ")
Однако, мне выдает в конце "*", чего не должно быть, а также если, например число x в степени 1, то выводит "x^1", а надо "x". Как это исправить?
Ответы (1 шт):
Автор решения: Zombotron
→ Ссылка
Вообще, там желательно бы все переделать, но незачем вам мозг пока ломать. В рамках логики вашего примера (только последний цикл вывода подкорректировал) вот так:
a = []
def pr(m):
d = 2
from math import sqrt
while d <= int(sqrt(m)):
if m%d == 0:
return d
d += 1
return 1
n = int(input())
f = 1
while f == 1:
d = int(pr(n))
if d != 1:
a.append(d)
n = int(n/d)
else:
f = 0
a.append(n)
k, n = 2, max(a)
if k == 1:
k = k+1
if k == 0:
k = k+2
r=[]
for x in range(k,n+1):
i=2
while i*i<=x:
if x%i==0:
break
i+=1
else:
r.append(x)
t = []
for g in r:
if g in a:
t.append(g)
cnt = 0
for l in t:
cnt = cnt + 1
u = []
e = a.count(l)
if cnt == len(t):
if e == 1:
print(l)
else:
print(l, '^', e)
else:
if e == 1:
print(l, "*", end=" ")
else:
print(l, '^', e, "*", end=" ")