Projecteuler problem 5

Code-Stücke können hier veröffentlicht werden.
Antworten
suizo
User
Beiträge: 3
Registriert: Donnerstag 2. Juli 2009, 10:18

Hallo zusammen

Seit gestern versuche ich (als neuling in py =) die aufgaben auf projecteueler.net zu lösen.

bei dieser aufgabe http://projecteuler.net/index.php?section=problems&id=5

weiss ich echt nicht warum dieser code nicht geht.

code:
http://pastebin.ch/2245

kann mir jemand dies erklären?

Gruss
suizo

ps. sry wegen den links js geht bei mir atm nicht d.h. kann ichs nicht besser posten =)
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Was heißt denn "funktioniert nicht"? Hab das Zeug jetzt nicht ausgeführt, darum sag doch mal, was tut denn nicht? ;-)

Übrigens könntest du den Modulo-Rest verwenden:

Code: Alles auswählen

In [1]: 10 %2
Out[1]: 0

In [2]: 10 % 3
Out[2]: 1

In [3]: 20 % 3
Out[3]: 2
Grüße
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

suizo hat geschrieben:Hallo zusammen

Seit gestern versuche ich (als neuling in py =) die aufgaben auf projecteueler.net zu lösen.

bei dieser aufgabe http://projecteuler.net/index.php?section=problems&id=5

weiss ich echt nicht warum dieser code nicht geht.
Und ich verstehe nicht, was du dir dabei gedacht hast!

Euler 5 ist eine Aufgabe, die man in 3 min auf dem Papier löst - ein Programm braucht man dafür überhaupt nicht.

Gedankenanstoß dazu: Eine Zahl, die garantiert ohne Rest durch alle Zahlen von 1 bis 20 teilbar ist, ist 20!. Das ist allerdings nicht die kleinste Zahl. Beispielsweise kann man die 10 aus dem Produkt herauslassen, weil das Ergebnis trotzdem noch durch 10 teilbar ist, weil in dem Produkt 2 und 5 ohnehin vorkommen. Wenn du diese Idee zu Ende denkst, dann hast du am Ende ein paar Zahlen, die du mit dem Taschenrechner multiplizierst und fertig.
suizo
User
Beiträge: 3
Registriert: Donnerstag 2. Juli 2009, 10:18

@Dauerbaustelle
danke für dein input =)
ja es stimmt es macht mehr sinn!

was nicht funktioniert?
es läuft und läuft und läuft und liefert mir kein resultat zurück

@numerix
es geht mir nicht ob es eine "schlaue" lösung ist oder nicht. Ich weiss das man die aufgabe im kopf lösen kann (kgv der zahl suchen und diese dann multiplizieren abr nicht 2 mal) (das in der klammer versteht jetzt sicher niemand aber egal um das geht es ja nicht :wink:

mir geht es etwas mit py zu lösen. wie ich evt. zu wenig betont habe lerne ich gerade py (bin in der py doku im modul 9 klasse .. :oops:

da mir das lesen zu einseitig wurde begann ich mit denn euler aufgaben.

@all

ich verstehe immer noch nicht warum der code nicht geht!

bei 1-10 findet er die lösung nähmlich 2520
siehe code:

Code: Alles auswählen

    for x in range(2000, 90000000000):
    	q = True
    	for y in range(1,11):
    		if float(x) / float(y) != x / y:
    			q=False
    			break
    	if q:
    		print x
    		break
warum gehts nicht wenn ich den range von der for-schleife auf range(11,21) setzte?

Gruss
Suizo

ps. danke schon im voraus für die antwort(en) :wink:
BlackJack

@suizo: Vielleicht bist Du auch einfach nur zu ungeduldig. Die Zahl ist nämlich um einiges grösser als die läppischen 2520.
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Jo, mein C-Programm was ich vorher dafür geschrieben hatte (was um einiges schneller ist!) ist auch gelaufen und gelaufen, bis ich keine Lust mehr hatte zur warten (waren bestimmt 10 Min oder oder so)
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

suizo hat geschrieben:@numerix
es geht mir nicht ob es eine "schlaue" lösung ist oder nicht.
Na, dann hast du's ja geschafft, denn eine "unschlaue" Lösung hast du ja entwickelt. "Programmieren" ist doch nicht das Gegenteil von "schlauer Lösung"! Um die Probleme von Euler & Co. zu lösen, brauchst du zunächst einmal eine schlaue Lösungsidee bzw. einen Algorithmus. Den musst du dann implementieren. Dir fehlt der erste Teil, darum wird aus dem zweiten auch nichts.

Überleg doch mal, wie viele Schleifendurchläufe du da produzierst. Das kann doch nicht funktionieren. Wenn du es partout nicht mit Stift und Papier lösen willst, dann entwickle doch einen Algorithmus, der dir das kgV(1,...,20) berechnet. Der braucht max. ein paar Millisekunden ...
BlackJack

Mit den passenden Modulen ist das auch ein ganz kleiner Einzeiler:

Code: Alles auswählen

In [6]: reduce(gmpy.lcm, xrange(1, 11))
Out[6]: mpz(2520)
Antworten