2017-06-13 1 views
1

In Python2.7 möchte ich endliche Sequenzen für eine gegebene ganze Zahl erzeugen, indem ich die Summe der Primfaktoren (sopfr) -Funktion über das Ergebnis (s) wiederhole, bis eine Primzahl erreicht ist . Der folgende Code für sopfr (n) stammt von OEIS A001414.Python-Summe von Primfaktoren funktioniert, um endliche Sequenz zu erzeugen

from sympy import factorint 
def sopfr(n): 
    return sum(p*e for p, e in factorint(n).items()) 

>>>sopfr(888) 
46 
>>> 

Ich mag würde diesen Code ändern, so dass er dieses Ergebnis geben wird

>>>sopfrs(888) 
46 25 10 7 
>>> 

Wo 46 = sopfr (888), 25 = sopfr (46) ... und so weiter, bis das in einem prime endet, in diesem Fall 7. Ich habe etwas gelesen und experimentiert mit while und for Schleifen ohne Glück. Experimente, die, ich bin sicher, würde für ein Lachen gut sein. Verzeihen Sie den Anfänger Charakter dieser Frage, jede Hilfe würde geschätzt werden.

+0

fühlt sich an wie sopfrs aussehen könnte: wenn n eine Primzahl (sopfr (n)) sonst einen Block von Druck tun sopfr (n) und rufende sopfrs (sopfr (n)) –

Antwort

0

Sie können so etwas wie dieses Beispiel verwenden:

from sympy import factorint 

def sopfr(n): 
    sub = [] 
    while True: 
     a = sum(k*v for k,v in factorint(n).items()) 
     if a == n: 
      break 
     else: 
      sub.append(a) 
      n = a 
    return sub 
# Tests 
a = sopfr(888) 
print(a) 
a = sopfr(65) 
print(a) 

Ausgang:

[46, 25, 10, 7] 
[18, 8, 6, 5] 
Verwandte Themen