我目前正在编写一个程序,该程序在COBOL中找到最大的素数或数字。这是我所拥有的:
IDENTIFICATION DIVISION.
PROGRAM-ID. EULER2.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 num1 PIC 9(12) VALUE 600851475143.
01 num2 PIC 9(6) VALUE 2.
01 smallest PIC 9(6) VALUE 0.
01 num3 PIC 9(6).
PROCEDURE DIVISION.
MAIN-PROCEDURE.
PERFORM whileLoop UNTIL num1 <= num2.
DISPLAY "Greatest prime of large number " smallest.
STOP RUN.
whileLoop.
IF FUNCTION MOD(num1, num2) = 0
DIVIDE num2 INTO num1.
IF(smallest LESS THAN num2)
SET smallest TO num2
ADD 1 TO smallest
ELSE
ADD 1 TO num2
END-IF.
此代码有效。但是为了得到正确的答案,我必须在最小的数上加上1,因为它会返回小于1的最大质数。同样,当我检查诸如最小的数时,比运行此数要多得多用另一种语言编程。我想知道这里是否存在内存问题,或者我是否可以洞悉COBOL如何运行此问题。
没有内存使用问题。运行时间受显示值而不是二进制值的使用的影响,并且所有偶数都经过测试,尽管这些不可能是素数。
[在下面,我添加了语句display num2
,以显示除构成数字之外的所有素数。在声明后,我还将所有分隔符句段替换为其段落末尾的单独一行。
代码:
IDENTIFICATION DIVISION.
PROGRAM-ID. EULER2.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 num1 comp-5 PIC 9(12) VALUE 600851475143.
01 num2 comp-5 PIC 9(6) VALUE 2.
01 smallest comp-5 PIC 9(6) VALUE 0.
PROCEDURE DIVISION.
MAIN-PROCEDURE.
PERFORM whileLoop UNTIL num1 < num2
DISPLAY "Greatest prime of large number " smallest
STOP RUN
.
whileLoop.
IF FUNCTION MOD(num1, num2) = 0
DIVIDE num2 INTO num1
IF(smallest LESS THAN num2)
SET smallest TO num2
end-if
display num2
ELSE
ADD 1 TO num2
END-IF
.
输出:
0000071
0000839
0001471
0006857
Greatest prime of large number 0006857