Так что, очевидно, в зависимости от того, скажу ли я программе напечатать переменную i, или нет, я получаю разные результаты, которые не должны иметь ничего общего с тем, печатаю я это или нет.
PROGRAM hello
IMPLICIT NONE
integer :: n,i, mini
logical :: leave = .false.
read*, n
print*, is_prime(n)
!!---------------------------------------------------------------------
do i=n, n/2, -1
print*, "I= ", i !!if you comment out this line, the result will be different than if you were to keep it, try it out yourselves
if(is_prime(i)) then
mini = i
end if
end do
print*, "the lowest prime number between your number and its half is: ", mini
!!----------------------------------------------------------
CONTAINS
logical function is_prime(n)
integer::n,i
do i=2,n
if(mod(n,i) == 0 .and. (i/=1 .and. i/=n) ) then
is_prime = .false.
elseif(mod(n,i) /=0 .and. i == n-1 .and. is_prime .neqv. .false.) then
is_prime = .true.
end if
end do
return
end function
END PROGRAM
Таким образом, если вы закомментируете строку, которую я указал, результат «мини» будет другим, чем если бы вы его сохранили, как я уже сказал.Я довольно новичок в Фортране, поэтому я не знаю, делаю ли я что-то не так, или если это как-то связано с компилятором, но мне кажется странным, что установка строки print * в любом случаеизмените значение переменной, и это то, что, по-видимому, происходит.
Например, если вы попробуете это сами, вывод mini, когда строка печати находится, например, набирает 48, равен 29, что верно, это минимальное простое число от 48 до половины, но когда вы наберете 48 и прокомментируете знаменитую строку печати, результат будет -2 вместо 29. Кто-нибудь из вас знает, почему это происходит?