Effizientes Lösen eines Buchstaben- / Zahlenproblems in Python

8

Wenn a = 15 und 152 als a2 dargestellt wird, während 215 als 2a dargestellt wird, muss eine Zahl x gefunden werden, so dass

8x = 8*x8

Ich habe diesen naiven Python-Code ausprobiert

%Vor%

Aber es dauert sehr lange, ein korrektes Ergebnis zu erzielen.

Wie kann ich den Code optimieren?

    
Robin Dey 28.01.2011, 15:31
quelle

2 Antworten

10

Ein bisschen Mathe hilft hier: Sei x eine natürliche Zahl mit n Ziffern. Dann 8x = 8 * 10 ^ n + x und x8 = 10 * x + 8. Also ist die zu lösende Gleichung 8 * 10 ^ n + x = 8 * (10 * x + 8) = 80 * x + 64 , wobei x und n natürliche Zahlen sein müssen. Es folgt sofort, dass x = (8 * 10 ^ n - 64) / 79. Jetzt müssen wir nur noch überprüfen, welche der Zahlen der Form 8 * 10 ^ n - 64 durch 79 teilbar ist, was sehr schnell ist:

%Vor%     
Philipp 28.01.2011, 15:47
quelle
1

Sie sollten versuchen, str to int-Umwandlungen loszuwerden.

Zunächst könnte 8*int(str(i)+"8") als 8*(i*10+8) geschrieben werden und der erste Teil könnte in 8*( int(log(i)/log(10))+1) + i

geändert werden     
Elalfer 28.01.2011 15:49
quelle

Tags und Links