...
1*&---------------------------------------------------------------------*
2*& Report /WUE/AUFGABE_PRIMZAHL
3*&
4*&---------------------------------------------------------------------*
5*& Anmerkung: um bei einer Zahl entscheiden zu können, ob diese eine Primzahl ist,
6*& genügt es die Primzahlen zu prüfen die kleiner gleich der Würzel der Zahl sind
7*&
8*&---------------------------------------------------------------------*
9REPORT /wue/aufgabe_primzahl.
10
11
12PARAMETERS p_range TYPE i.
13
14"Tabelle in der alle gefundenen Primzahlen gespeichert werden, die kleiner gleich
15"der Würzel der eingegebenen Zahl sind
16DATA gt_prim_num TYPE TABLE OF i.
17
18"Diese Variable dient dazu, alle Zahlen <= der eingegebenen Zahl und >= 2 aufzustellen
19DATA g_number TYPE i VALUE 1.
20
21"Diese Variable dient dazu, zu sagen, ob die aktuelle g_number eine Primzahl ist oder nicht
22DATA g_is_prime TYPE abap_bool.
23
24"mit sqrt( zahl1 ) kann die Quadratwurzel der Zahl1 berechnet werden
25DATA(g_sqrt_range) = sqrt( p_range ).
26
27
28
29"da die zu prüfenden Zahlen bei der 2 beginnend durch Addition von 1 aufgestellt werden
30"muss die Schleife lediglich p_range - 1 male durchlaufen werden
31DO p_range - 1 TIMES.
32
33 "zählt die zu prüfende Zahlen hoch
34 ADD 1 TO g_number.
35
36 "grundsätzlich wird solange, bis es nicht widerlegt ist angenommen, dass g_number eine Primzahl ist
37 g_is_prime = abap_true.
38
39 "Jede Zahl die in der Tabelle gt_prim_num enthalten ist wird geprüft, ob g_number durch diese ohne Rest teilbar ist
40 LOOP AT gt_prim_num ASSIGNING FIELD-SYMBOL(<g_prim>).
41
42 "Durch Zahl1 MOD Zahl2 kann der Rest, der bei Zahl1 / Zahl2 herauskommt ermittelt werden
43 "Sobald dieser bei g_number / <g_prim> 0 ist, handelt es sich bei g_number um keine Primzahl und somit muss diese nicht
44 "weiter überprüft werden, folglich kann die Loop-Schleife mit EXIT verlassen werden
45 IF g_number MOD <g_prim> = 0.
46 g_is_prime = abap_false.
47 EXIT.
48 ENDIF.
49
50 ENDLOOP.
51
52 "Wenn nicht widerlegt werden konnte, dass g_number eine Primzahl ist, wird diese ausgegeben
53 IF g_is_prime = abap_true.
54
55 "Wenn die neu gefundene Primzahl <= g_sqrt_range, wird diese in die Tabelle gt_prim_num eingefügt (Erklärung siehe Anmerkung)
56 IF g_number <= g_sqrt_range.
57 INSERT g_number INTO TABLE gt_prim_num.
58 ENDIF.
59 WRITE g_number.
60 ENDIF.
61
62ENDDO.
View as plain text