主程序中首尾两个is_prime(32)输出值不同,这是怎么回事?
把do循环删除后又变得正常了。
[Fortran] 纯文本查看 复制代码 program test
implicit none
logical,external :: sum_is_5,is_prime
integer :: n
print *,is_prime(32)
do n=2,100
if(sum_is_5(n).and.is_prime(n)) print *,n
end do
print *,is_prime(32)
end program test
logical function sum_is_5(i)
implicit none
integer :: i,digit(3)=0
sum_is_5=.false.
digit(1)=mod(i,10)
digit(2)=mod(i/10,10)
digit(3)=i/100
if(sum(digit)==5) sum_is_5=.true.
end function sum_is_5
logical function is_prime(j)
implicit none
integer :: j,k=2
is_prime=.true.
do while(k<j)
if(mod(j,k)==0) then
is_prime=.false.
exit
end if
k=k+1
end do
end function is_prime
|