Wie finde ich die Summe aller Vielfachen von 3 oder 5 unter 1000 in Python?

7

Ich bin mir nicht sicher, ob ich das auf mathe.stackexchange gepostet haben sollte, aber es enthält mehr Programmierung, also habe ich es hier gepostet.

Die Frage scheint wirklich einfach zu sein, aber ich sitze seit mindestens einer Stunde hier und habe es nicht herausgefunden. Ich habe verschiedene Lösungen ausprobiert und mathematische Formeln dafür gelesen, aber es gibt mir nicht die richtige Antwort, wenn ich es codiere! Ich habe zwei verschiedene Lösungen dafür gefunden, die beide die falsche Antwort geben. Die erste Lösung gibt mir 265334, während die zweite 232169 gibt. Die Antwort ist 233168, also ist die zweite Lösung näher.

Ich sollte erwähnen, dass dies eine Frage von Project Euler ist, die erste um genau zu sein .

Hier ist mein Code. Irgendwelche Ideen was ist los?

%Vor%     
qwerty 08.05.2011, 20:51
quelle

15 Antworten

4

range(k,max) enthält nicht max , also überprüfen Sie wirklich bis einschließlich 998 (während 999 ein Vielfaches von 3 ist). Verwenden Sie stattdessen range(1,1000) .

    
Fred Foo 08.05.2011, 20:59
quelle
12

Sie verkomplizieren die Dinge. Sie brauchen nur eine Liste von Zahlen, die Vielfache von 3 oder 5 sind, die Sie leicht mit einem Listenverständnis :

%Vor%

Verwenden Sie dann sum , um den Gesamtwert zu erhalten:

%Vor%

Oder verwenden Sie stattdessen besser einen Generatorausdruck :

%Vor%

Oder sogar besser besser (mit freundlicher Genehmigung von Exelian):

%Vor%     
zeekay 08.05.2011 20:59
quelle
2

Das Problem mit Ihrer ersten Lösung ist, dass sie ein Vielfaches von 15 doppelt zählt (weil sie ein Vielfaches von 3 und 5 sind).

Das Problem mit Ihrer zweiten Lösung ist, dass sie nicht 999 zählt (ein Vielfaches von 3). Setzen Sie einfach max = 1000 , um dies zu beheben.

    
Gabe 08.05.2011 21:00
quelle
2

Ich mag das am meisten:

%Vor%     
pillmuncher 08.05.2011 22:23
quelle
1
%Vor%

Das funktioniert, aber verwenden Sie 1000 für max, also auch 999.

    
Jaanus 08.05.2011 21:03
quelle
1

Ich weiß, das war vor drei Monaten, aber als ein Experiment, weil ich neu bei Python bin, habe ich beschlossen, einige der Antworten der anderen Leute zu kombinieren und ich habe eine Methode gefunden, an die Sie die maximale Zahl und die Teiler als übergeben können eine Liste und es gibt die Summe zurück:

%Vor%     
DigitalFiz 23.08.2012 12:32
quelle
1

Ergebnis = 0

für i im Bereich (0,1000):

%Vor%

Druckergebnis

0

3

5

6

9

. . .

993

995

996

999

233168

    
user3770705 30.07.2014 12:34
quelle
0

Sie können auch funktionale Programmiertools verwenden ( filter ):

%Vor%

Oder verwenden Sie zwei Listen mit Subtraktion von Vielfachen von 15 (die in beiden Listen erscheinen):

%Vor%

Ich mag diese Lösung, aber ich denke, es braucht einige Verbesserungen ...

    
Alex Bogomolov 05.05.2015 17:17
quelle
0

Hier geht's:

%Vor%     
PhysicsLot 27.07.2015 16:07
quelle
0

Hier ist meine Lösung:

%Vor%     
Emily Fotopoulou 23.03.2017 15:18
quelle
0

Es gibt Floor (999/3) Vielfache von 3, Floor (999/5) Vielfache von 5 und Floor (999/15) Vielfache von 15 unter 1000.

Für 3 sind dies: 3 + 6 + 9 + 12 + ... + 999 = 3 * (1 + 2 + 3 + 4 + ... + 333)

= 3 * (333 * 334/2), weil die Summe der ganzen Zahlen von 1 bis k k * (k + 1) / 2 ist.

Verwenden Sie die gleiche Logik für die Summe der Vielfachen von 5 und 15. Dies ergibt eine konstante Zeitlösung. Generalisieren Sie dies für beliebige Eingaben.

    
Dave 23.03.2017 16:04
quelle
0

Ich weiß, dass dies vor 6 Jahren ist, aber ich dachte, dass ich eine Lösung teilen würde, die von einer mathematischen Formel gefunden wurde, die ich für interessant hielt, da es die Notwendigkeit löscht, alle Zahlen zu durchlaufen.

Ссылка

%Vor%

Gibt Folgendes aus:

%Vor%     
w_jay 21.06.2017 19:53
quelle
0

das ist meine Lösung

%Vor%     
Shreyansh Mehta 16.12.2017 10:51
quelle
0
%Vor%     
Jitendra Bhalothia 09.01.2018 16:16
quelle
0

Ich denke, nur die letzten Zeilen Ihres Codes sind wichtig. Die Anweisung oder ist die Schlüsselanweisung in diesem Code. Wenn Sie den maximalen Wert auf 999 einstellen, sollten Sie ihn auf 1000 einstellen, damit alle Werte abgedeckt sind. Hier ist mein Code.

%Vor%     
Anuj Kulkarni 28.01.2018 11:42
quelle

Tags und Links