Seite 1 von 1
Das Vielfache von 3 oder 5 summieren
Verfasst: Freitag 23. Dezember 2022, 18:48
von dahvid
Ich möchte alle Zahlen unter 1000, die ein vielfaches von 3 oder 5 sind, summieren. Ich weiß, wie ich alle Zahlen finde, aber nicht, wie man die Summe in Python berechnet.
Code: Alles auswählen
for i in range(1, 1000):
sum = 0
if (i % 5 == 0) or i % 3 == 0:
sum += i
print(sum)
Re: Das Vielfache von 3 oder 5 summieren
Verfasst: Freitag 23. Dezember 2022, 19:26
von Sirius3
Um eine Summe zu bilden, muss man mehrere Zahlen addieren. Du setzt aber `sum` immer wieder auf 0 zurück. Das darf man nur einmal vor der Schleife machen.
Re: Das Vielfache von 3 oder 5 summieren
Verfasst: Freitag 23. Dezember 2022, 21:34
von dahvid
Sirius3 hat geschrieben: Freitag 23. Dezember 2022, 19:26
Um eine Summe zu bilden, muss man mehrere Zahlen addieren. Du setzt aber `sum` immer wieder auf 0 zurück. Das darf man nur einmal vor der Schleife machen.
Vielen Dank. Jetzt hat es funktioniert

Re: Das Vielfache von 3 oder 5 summieren
Verfasst: Freitag 23. Dezember 2022, 23:04
von __blackjack__
`sum()` ist der Name einer eingebauten Funktion, den sollte man nicht an einen anderen Wert binden, weil man dann die Funktion nicht mehr verwenden kann, und weil es Leser verwirrt.
Und man könnte die Funktion auch gleich benutzen:
Code: Alles auswählen
In [39]: sum(i for i in range(1000) if i % 5 == 0 or i % 3 == 0)
Out[39]: 233168
Re: Das Vielfache von 3 oder 5 summieren
Verfasst: Dienstag 27. Dezember 2022, 00:52
von dahvid
__blackjack__ hat geschrieben: Freitag 23. Dezember 2022, 23:04
`sum()` ist der Name einer eingebauten Funktion, den sollte man nicht an einen anderen Wert binden, weil man dann die Funktion nicht mehr verwenden kann, und weil es Leser verwirrt.
Und man könnte die Funktion auch gleich benutzen:
Code: Alles auswählen
In [39]: sum(i for i in range(1000) if i % 5 == 0 or i % 3 == 0)
Out[39]: 233168
Stimmt, danke für den wertvollen Tipp
Re: Das Vielfache von 3 oder 5 summieren
Verfasst: Dienstag 27. Dezember 2022, 17:08
von bb1898
Projekt Euler, Problem Nr. 1, richtig? Der Text auf der Projekt-Hauptseite tut ein bisschen so, als müsste man bei allen Aufgaben grundsätzlich den Computer anwerfen. Muss man nicht, in vielen Fällen tun es Bleistift und Papier. Wenn mein Gedächtnis mich nicht täuscht, ist die Nr. 1 mit Schulwissen lösbar. Die bekannte Geschichte dazu spielt auf jeden Fall in einer Schule.
Re: Das Vielfache von 3 oder 5 summieren
Verfasst: Mittwoch 28. Dezember 2022, 00:02
von __blackjack__
Auf moderner Hardware macht es für den Rechenknecht a.k.a. Computer keinen Unterschied mehr ob man das ”brute force” löst, oder mit der Methode die man mit Stift und Papier verwenden würde, aber auf dem C64 sind das in BASIC 21 Sekunden für die ”brute force”-Variante, immerhin noch 2 Sekunden für einen etwas weniger rechenintensiven Ansatz, und quasi sofort berechnet, wenn man die Papier und Stift Variante wählt.
Code: Alles auswählen
10 REM -----------------------------
20 REM PROJECT EULER (PROJECTEULER.NET)
30 REM
40 REM PROBLEM 1: FIND THE SUM OF ALL
50 REM THE MULTIPLES OF 3 OR 5 BELOW
60 REM 1000.
70 REM
80 REM -----------------------------
90 REM SETUP SOME VALUES FOR (ALMOST)
100 REM ALL THREE ALGORITHMS.
110 A=3:B=5:C=999:AB=A*B
120 REM -----------------------------
130 REM ASK USER WHICH ALGORITHM TO
140 REM USE, AND CALL, AND TIME THE
150 REM CHOSEN ALGORITHM.
160 REM
170 POKE 53280,14:POKE 53281,14
180 PRINT"{BLU}{CLR}{RVS ON}PROJECT EULER - PROBLEM 1{RVS OFF}{DOWN}"
190 PRINT"FIND THE SUM OF ALL THE MULTIPLES OF 3"
200 PRINT"OR 5 BELOW 1000.{DOWN}"
210 PRINT"{LGRN}1{BLU}) NAIVE"
220 PRINT"{LGRN}2{BLU}) BETTER"
230 PRINT"{LGRN}3{BLU}) CLOSED FORMULA"
240 INPUT"{DOWN}CHOOSE ALGORITHM ({LGRN}1{BLU}-{LGRN}3{BLU})";I
250 PRINT"{DOWN}CALCULATING...{UP}"
260 REM N IS SET TO 0 BEFORE THE CALL AND
270 REM THE SUBROUTINE MUST RETURN THE
280 REM RESULT IN N.
290 TI$="000000":N=0:ON I GOSUB 400,600,800
300 PRINT"RESULT ={LGRN}";N;"{BLU}(";RIGHT$(TI$,2);" SECONDS)":END
400 REM -----------------------------
410 REM THE NAIVE SOLUTION. TESTS
420 REM EVERY NUMBER FROM 1 TO C IF
430 REM IT IS DIVIDED BY A OR B AND
440 REM SUMS THEM UP. TAKES ABOUT
450 REM 21 SECONDS.
460 REM
470 FOR I=1 TO C:IF INT(I/A)*A=I OR INT(I/B)*B=I THEN N=N+I
480 NEXT:RETURN
600 REM -----------------------------
610 REM BETTER ALGORITHM, BUT RUNTIME
620 REM STILL DEPENDS ON THE VALUE OF
630 REM C. SUMS UP ALL MULTIPLES OF A
640 REM AND B AND THEN SUBRACTS ALL
650 REM THE NUMBERS THAT ARE DIVIDED
660 REM BY A *AND* B. TAKES ABOUT
670 REM 2 SECONDS.
680 REM
690 FOR I=0 TO C STEP A:N=N+I:NEXT
700 FOR I=0 TO C STEP B:N=N+I:NEXT
710 FOR I=0 TO C STEP AB:N=N-I:NEXT
720 RETURN
800 REM -----------------------------
810 REM SAME IDEA AS LAST SOLUTION BUT
820 REM INSTEAD OF LOOPING THROUGH THE
830 REM MULTIPLES IT USES GAUSS' CLOSED
840 REM FORMULA TO CALCULATE THE SUMS.
850 REM TAKES LESS THAN A SECOND.
860 REM
870 REM G(X)=X*(FLOOR(C/X)^2+FLOOR(C/X))
880 REM F=G(A)+G(B)-G(A*B)
890 REM
900 T=INT(C/A):D=A*(T*T+T)
910 T=INT(C/B):E=B*(T*T+T)
920 T=INT(C/AB):F=AB*(T*T+T)
930 N=(D+E-F)/2:RETURN