不知道 发表于 2016-10-20 21:17:05

对同一个常数,函数前后输出值不同

主程序中首尾两个is_prime(32)输出值不同,这是怎么回事?
把do循环删除后又变得正常了。
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

kerb 发表于 2016-10-20 23:22:03

本帖最后由 kerb 于 2016-10-20 23:24 编辑

这种判别质数效率比较低

li913 发表于 2016-10-21 09:42:45

子过程中,定义时赋值(24行,k),变量具有save属性。拆开写:
integer j, k
k=2

楚香饭 发表于 2016-10-21 09:44:23

第22行,图片中第24行
integer :: j,k=2
改为
integer :: j,k
k=2

前者 k=2 是第一次赋值。后者 k=2 是每次都赋值。

不知道 发表于 2016-10-21 10:02:54

楚香饭 发表于 2016-10-21 09:44
第22行,图片中第24行
integer :: j,k=2
改为


原来是这样,改了之后就对了,谢谢

不知道 发表于 2016-10-21 10:04:44

kerb 发表于 2016-10-20 23:22
这种判别质数效率比较低

这个我知道,但是找一百以内的素数没有必要优化
页: [1]
查看完整版本: 对同一个常数,函数前后输出值不同