Fortran Coder

查看: 8612|回复: 5
打印 上一主题 下一主题

[子程序] 对同一个常数,函数前后输出值不同

[复制链接]

3

帖子

1

主题

0

精华

新人

F 币
18 元
贡献
9 点
跳转到指定楼层
楼主
发表于 2016-10-20 21:17:05 | 显示全部楼层 |只看大图 回帖奖励 |倒序浏览 |阅读模式
主程序中首尾两个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

123.PNG (31.96 KB, 下载次数: 237)

123.PNG
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

3

帖子

1

主题

0

精华

新人

F 币
18 元
贡献
9 点
沙发
 楼主| 发表于 2016-10-21 10:02:54 | 显示全部楼层
楚香饭 发表于 2016-10-21 09:44
第22行,图片中第24行
  integer :: j,k=2
改为

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

3

帖子

1

主题

0

精华

新人

F 币
18 元
贡献
9 点
板凳
 楼主| 发表于 2016-10-21 10:04:44 | 显示全部楼层
kerb 发表于 2016-10-20 23:22
这种判别质数效率比较低

这个我知道,但是找一百以内的素数没有必要优化
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-2 21:38

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表