Lerne und übe ABAP – Nte Primzahl

Lerne und übe ABAP. In der ABAP-Übung „Nth Prime“ implementierst Du ein ABAP-Programm, um die nte Primzahl zu bestimmen. Es gibt 40 geniale ABAP Übungen auf exercism. Du kannst diese Übung entweder in Deinem SAP-System ausprobieren oder Dich kostenlos auf der Plattform anmelden und die Übung absolvieren. Du kannst Dir sogar Lösungen von anderen Nutzen ansehen und dadurch Deine Lösung vergleichen.

Aufgabenstellung

Bestimme bei einer Zahl n die n-te Primzahl.

Durch Auflistung der ersten sechs Primzahlen: 2, 3, 5, 7, 11 und 13, sehen wir, dass die 6. Primzahl 13 ist.

Wenn Deine Sprache in der Standardbibliothek Methoden zum Umgang mit Primzahlen bereitstellt, tue so, als gäbe es sie nicht, und implementiere sie selbst.

Beispiel Programmierung

CLASS zcl_nth_prime DEFINITION
  PUBLIC
  FINAL
  CREATE PUBLIC .

  PUBLIC SECTION.
    METHODS prime
      IMPORTING
        input         TYPE i
      RETURNING
        VALUE(result) TYPE i
      RAISING
        cx_parameter_invalid.
  PROTECTED SECTION.
  PRIVATE SECTION.

ENDCLASS.


CLASS zcl_nth_prime IMPLEMENTATION.
  METHOD prime.

    IF input = 0.
      RAISE EXCEPTION TYPE cx_parameter_invalid.
    ENDIF.

    DATA:  lt_list         TYPE STANDARD TABLE OF i,
           lt_list_result  TYPE STANDARD TABLE OF i,
           lv_max          TYPE i,
           lv_prime_number TYPE i.

    DATA(lv_square) = input * input.

    IF lv_square <= 1.
      lv_square = 2.
    ENDIF.

    DO lv_square TIMES.
      APPEND sy-tabix + 1 TO lt_list.
    ENDDO.

    DELETE lt_list INDEX 1.
    lt_list_result = lt_list.
    lv_prime_number = 2.
    lv_max = input * input.

    WHILE lv_prime_number * lv_prime_number < lv_max.
      LOOP AT lt_list ASSIGNING FIELD-SYMBOL(<fs_int>).
        IF <fs_int> MOD lv_prime_number = 0 AND <fs_int> <> lv_prime_number.
          DELETE lt_list_result WHERE table_line = <fs_int>.
        ENDIF.
      ENDLOOP.
      lv_prime_number = lv_prime_number + 1.
    ENDWHILE.

    result = lt_list_result[ input ].
  ENDMETHOD.

ENDCLASS.

Erklärung

Dies ist eine Implementierung einer ABAP-Klasse zcl_nth_prime zur Bestimmung der n-ten Primzahl.

Die Klasse hat eine öffentliche Methode prime, die eine ganze Zahl n als Eingabe annimmt und die n-te Primzahl als Ergebnis zurückgibt. Die Methode kann eine Ausnahme cx_parameter_invalid auslösen, wenn die Eingabe 0 ist.

Innerhalb der Methode prime werden zunächst einige interne Variablen initialisiert, wie z.B. eine interne Tabelle lt_list, die alle Zahlen von 1 bis zur Quadratwurzel von n enthält, und eine weitere interne Tabelle lt_list_result, die eine Kopie von lt_list ist. Außerdem werden die Variablen lv_max, lv_square und lv_prime_number erzeugt.

Dann wird in einer Schleife jede Zahl in lt_list daraufhin überprüft, ob sie durch die aktuelle Primzahl teilbar ist (mit Ausnahme der Primzahl selbst). Ist dies der Fall, wird die entsprechende Zahl aus lt_list_result entfernt.

Dieser Vorgang wird fortgesetzt, bis die aktuelle Primzahl das Quadrat ihrer Größe überschreitet. Am Ende ist lt_list_result die Liste aller Primzahlen von 1 bis zur Quadratwurzel von n, und das n-te Element dieser Liste ist die gesuchte n-te Primzahl.

Diese Methode verwendet einen Algorithmus namens „Sieb des Eratosthenes“, um Primzahlen zu finden.

Über den Autor

Andreas Geiger

Mein Name ist Andreas Geiger und ich bin ein erfahrener Senior SAP Berater. Mit mehr als 10 Jahren Berufserfahrung habe ich mehrere SAP-Projekte erfolgreich abgeschlossen und umfangreiche Kenntnisse in verschiedenen Bereichen wie SAP FI, SAP MM und ABAP erworben. Nun möchte ich mein Wissen mit Dir teilen, um Dir einen Mehrwert zu bieten und Dich bei Deiner täglichen Arbeit mit dem SAP-System zu unterstützen.

Mehr zu ERP UP

ERP UP unterstützen

Wenn Du mit ERP UP zufrieden bist, kannst Du mich gerne unterstützen. Dabei gibt es unzählige Möglichkeiten, wie Du mich einfach und schnell unterstützen kannst. Wie Du genau ERP UP unterstützen kannst, erfährst Du hier. Vielen Dank.

Schreibe einen Kommentar