If statement Do循环忽略if语句
我试图在do循环中使用if语句,它应该生成素数。为此,我使用了模来分类数字。在它找到一个素数之后,我希望它更进一步,添加1,以便可以找到下一个素数并将其添加到数组If statement Do循环忽略if语句,if-statement,fortran,do-loops,If Statement,Fortran,Do Loops,我试图在do循环中使用if语句,它应该生成素数。为此,我使用了模来分类数字。在它找到一个素数之后,我希望它更进一步,添加1,以便可以找到下一个素数并将其添加到数组pzahl。我的问题是,循环似乎忽略了在找到素数之后,它应该进一步使用plauf,这样它就可以一直运行到无穷大。。。我试图重新排列循环和if语句的内容,但它就是不起作用。代码如下: PROGRAM Primzahlen IMPLICIT NONE INTEGER :: start, plauf, n, a INTE
pzahl
。我的问题是,循环似乎忽略了在找到素数之后,它应该进一步使用plauf
,这样它就可以一直运行到无穷大。。。我试图重新排列循环和if语句的内容,但它就是不起作用。代码如下:
PROGRAM Primzahlen
IMPLICIT NONE
INTEGER :: start, plauf, n, a
INTEGER, ALLOCATABLE, DIMENSION(:) :: pzahlen !array into which the prime numbers should be added
INTEGER :: input
INTEGER, DIMENSION(:), ALLOCATABLE :: alle
PRINT *, "How many prime numbers should be listed"
READ (*,*) input
ALLOCATE (pzahlen(input))
pzahlen(1) = 1
start = 2
plauf = 1
loop1: DO
ALLOCATE(alle(start))
loop2: DO n = 1,start
alle(n)= MODULO(start,n)
END DO loop2
IF (minval(alle) /= 0) THEN ! This is what it seems to ignore.
plauf= plauf + 1
pzahlen(plauf) = start
PRINT *, plauf
END IF
start = start + 1
IF (plauf == eingabe) then
EXIT
END IF
PRINT *, alle
DEALLOCATE(alle)
END DO loop1
PRINT *, "prime numbers:" , pzahlen(1:input)
END PROGRAM Primzahlen
我使用gfortran编译器,并在Emacs中编写它,如果这有助于了解情况的话。它并没有忽略它,而是正确执行:
loop2: DO n = 1,start
alle(n)= MODULO(start,n)
END DO loop2
无论什么是start
,alle(1)
都将始终为零,因为每个整数都可以被1整除。这意味着minval(alle)
也将始终为零,这意味着条件minval(alle)/=0
永远不会为真,语句也永远不会执行
添加:最后一个值,
alle(start)
,也将是零,因为每个数字本身都是可等分的。它没有忽略它,而是正确执行:
loop2: DO n = 1,start
alle(n)= MODULO(start,n)
END DO loop2
无论什么是start
,alle(1)
都将始终为零,因为每个整数都可以被1整除。这意味着minval(alle)
也将始终为零,这意味着条件minval(alle)/=0
永远不会为真,语句也永远不会执行
添加:最后一个值,
alle(start)
,也将是零,因为每个数字本身都是可等分的。您不应该结束DO loop1吗?结束DO loop1在结尾处。但是我不完全确定我是否应该早点使用它。你不应该结束DO loop1吗?END DO loop1在结尾处。但是我不完全确定我是否应该早点使用它。谢谢你的提示!我已经改变了这一点,现在它至少起了一半作用。虽然它还不是完美的,但是在你的代码中有一些东西是不必要的。例如,您总是检查所有数字,而您可以在第一次匹配后停止。如果在到达目标的平方根之前还没有找到除数,可以停止,因为不会有更大的除数。我将向loop2添加一个if语句以避免出现这种情况。我刚开始学习Fortran,所以你能帮忙真是太好了:)谢谢你的提示!我已经改变了这一点,现在它至少起了一半作用。虽然它还不是完美的,但是在你的代码中有一些东西是不必要的。例如,您总是检查所有数字,而您可以在第一次匹配后停止。如果在到达目标的平方根之前还没有找到除数,可以停止,因为不会有更大的除数。我将向loop2添加一个if语句以避免出现这种情况。我刚开始学习Fortran,所以你能帮忙真是太好了:)