有没有一种方法可以更好地管理我的COBOL程序中的数据使用情况

问题描述 投票:0回答:1

我目前正在编写一个程序,该程序在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如何运行此问题。

memory cobol
1个回答
0
投票

没有内存使用问题。运行时间受显示值而不是二进制值的使用的影响,并且所有偶数都经过测试,尽管这些不可能是素数。

[在下面,我添加了语句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
© www.soinside.com 2019 - 2024. All rights reserved.