Изучение методов генерации простых чисел в COBOL

Простые числа на протяжении веков интересовали математиков и программистов. В этой статье блога мы углубимся в мир генерации простых чисел с использованием языка программирования COBOL. Мы изучим различные методы, обсудим их реализацию в COBOL и проверим их вычислительную эффективность.

Метод 1: грубый перебор
Самый простой способ определить, является ли число простым, — это проверить, делится ли оно на любое число, кроме 1 и самого себя. В COBOL мы можем реализовать этот метод, используя вложенные циклы и переменную-флаг.

IDENTIFICATION DIVISION.
PROGRAM-ID. PRIME-BRUTE-FORCE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NUMBER PIC 9(5).
01 IS-PRIME PIC X(3) VALUE 'YES'.
01 I PIC 9(5).
01 J PIC 9(5).
PROCEDURE DIVISION.
    ACCEPT NUMBER
    PERFORM CHECK-PRIME
    DISPLAY 'Is prime? ' IS-PRIME
    STOP RUN.
CHECK-PRIME.
    PERFORM VARYING I FROM 2 BY 1 UNTIL I > NUMBER / 2
        IF NUMBER MOD I = 0
            MOVE 'NO' TO IS-PRIME
            EXIT PERFORM
        END-IF
    END-PERFORM.

Метод 2: Решето Эратосфена
Решето Эратосфена — это эффективный алгоритм для генерации простых чисел до заданного предела. Он работает путем итеративного вычеркивания кратных каждому найденному простому числу. Ниже представлена ​​реализация этого алгоритма на языке COBOL.

IDENTIFICATION DIVISION.
PROGRAM-ID. PRIME-SIEVE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 LIMIT PIC 9(5).
01 PRIME-TABLE OCCURS 0 TO 9999 TIMES DEPENDING ON LIMIT.
   05 IS-PRIME PIC X(3) VALUE 'YES'.
PROCEDURE DIVISION.
    ACCEPT LIMIT
    PERFORM GENERATE-PRIMES
    DISPLAY 'Prime numbers up to ' LIMIT ':'
    PERFORM DISPLAY-PRIMES
    STOP RUN.
GENERATE-PRIMES.
    PERFORM VARYING I FROM 2 BY 1 UNTIL I * I <= LIMIT
        IF IS-PRIME(I) = 'YES'
            PERFORM VARYING J FROM I * I BY I UNTIL J > LIMIT
                MOVE 'NO' TO IS-PRIME(J)
            END-PERFORM
        END-IF
    END-PERFORM.
DISPLAY-PRIMES.
    PERFORM VARYING I FROM 2 BY 1 UNTIL I <= LIMIT
        IF IS-PRIME(I) = 'YES'
            DISPLAY I
        END-IF
    END-PERFORM.

Метод 3: тест на простоту Миллера-Рабина
Тест на простоту Миллера-Рабина — это вероятностный алгоритм, позволяющий быстро определить, является ли число составным или, скорее всего, простым. Он выполняет несколько итераций теста для повышения точности. Вот пример реализации теста Миллера-Рабина в COBOL:

IDENTIFICATION DIVISION.
PROGRAM-ID. PRIME-MILLER-RABIN.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 NUMBER PIC 9(5).
01 ITERATIONS PIC 9(2) VALUE 10.
01 IS-PRIME PIC X(3) VALUE 'YES'.
PROCEDURE DIVISION.
    ACCEPT NUMBER
    PERFORM MILLER-RABIN-TEST
    DISPLAY 'Is prime? ' IS-PRIME
    STOP RUN.
MILLER-RABIN-TEST.
    PERFORM VARYING I FROM 1 BY 1 UNTIL I <= ITERATIONS
        IF NOT MILLER-RABIN-PASS(NUMBER)
            MOVE 'NO' TO IS-PRIME
            EXIT PERFORM
        END-IF
    END-PERFORM.
MILLER-RABIN-PASS.
    ...
    (Implement the Miller-Rabin primality test logic here)
    ...

В этой статье мы рассмотрели три различных метода генерации простых чисел в COBOL. Метод грубой силы прост, но требует больших вычислительных затрат. Решето Эратосфена — это высокоэффективный алгоритм генерации простых чисел до заданного предела. Тест на простоту Миллера-Рабина обеспечивает вероятностный подход для определения того, является ли число простым. В зависимости от требований вашей программы COBOL вы можете выбрать наиболее подходящий метод.

Поняв и внедрив эти методы генерации простых чисел в COBOL, вы сможете раскрыть возможности этого исторического языка программирования для эффективного решения математических задач.