Я пытаюсь использовать оператор if в цикле do, который должен генерировать простые числа. Для этого я использовал modulo
для сортировки чисел. После того, как он найдет простое число, я хочу, чтобы он сделал шаг дальше и добавил 1, чтобы следующее простое число можно было найти и добавить в массив pzahl
. Моя проблема заключается в том, что цикл, кажется, игнорирует, что он должен идти дальше с plauf
после того, как он нашел простое число, чтобы он продолжал идти до бесконечности ... Я попытался изменить содержимое цикла и оператора if, но это просто не работает. Вот код:Do-loop игнорирует if-statement
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
КОНЕЦ DO loop1 находится в конце. Но я не совсем уверен, что лучше использовать его раньше. – traytray