Do 循环忽略 if 语句
Do-loop ignores if-statement
我正在尝试在应该生成质数的 do 循环中使用 if 语句。为此,我使用 modulo
来整理数字。在它找到一个质数后,我希望它更进一步并加 1,以便可以找到下一个质数并将其添加到数组 pzahl
。我的问题是循环似乎忽略了它应该在找到质数后进一步使用 plauf
以便它一直持续到无穷大......我试图重新排列循环的内容并且如果声明,但它只是不工作。这是代码:
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)
也将为零,因为每个数字都可以被自身整除。
我正在尝试在应该生成质数的 do 循环中使用 if 语句。为此,我使用 modulo
来整理数字。在它找到一个质数后,我希望它更进一步并加 1,以便可以找到下一个质数并将其添加到数组 pzahl
。我的问题是循环似乎忽略了它应该在找到质数后进一步使用 plauf
以便它一直持续到无穷大......我试图重新排列循环的内容并且如果声明,但它只是不工作。这是代码:
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)
也将为零,因为每个数字都可以被自身整除。