Как удалить некоторые напечатанные символы?

Вообщем, такая проблема, надо разложить целое число 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=" ")
→ Ссылка