私は素数を生成するはずのdoループでif文を使用しようとしています。そのために私はmodulo
を使って数字を整理しました。素数が見つかったら、さらに進んで1を加えて次の素数を見つけ出し、配列pzahl
に追加します。私の問題は、ループが無視して、plauf
で素数を見つけた後にさらに進んで、無限になるまで続けるべきだということです...私はループとif文の内容を再配置しようとしましたが、働いていない。コードは以下の通りです:Doループは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に書きます。
END DO loop1を終了してください。 – Davislor
END DO loop1は最後にあります。しかし、もし私がむしろ早くそれを使うべきかどうかは、私は完全にはわかりません。 – traytray