关于fortran90的问题,急求。寻找1000以内所有的素数,用子程序。下面的程序软件报错。请教。

subroutinesushu(n,a,m)integera(n)doi=1,na(i)=ienddodoi=1,n-1if(a(i)>0)thendoj=i+1,nif... subroutine sushu(n,a,m)
integer a(n)
do i=1,n
a(i)=i
enddo
do i=1,n-1
if(a(i)>0) then
do j=i+1,n
if(mod(a(j),a(i)==0) then
a(j)=0
endif
enddo
endif
enddo
m=1
do i=2,n
if((a(i)>0) then
m=m+1
a(m)=a(i)
endif
enddo
endsubroutine sushu

program sushu_pro
parameter(n=1000)
integer a(n)
call subroutine(n,a,m)
write(*,100)(a(i),i=2,m)
100 format(1x,8i10)
end program sushu_pro
展开
 我来答
Tmaaaaaasol
2012-06-04 · TA获得超过128个赞
知道答主
回答量:19
采纳率:0%
帮助的人:37.6万
展开全部
我试了一下,有3个错误:
1、第9行少一个右括号;
2、第17行多了一个左括号;
3、第28行,调用子程序不是这么写的,是call sushu(n,a,m)。
×××××××××××××××××××××××××××××××××××××××××××××××××××××
另外,子程序算法写的有问题吧,运行一遍结果只有一个1。
还有像if(a(i)>0) then……end if没什么意义,都已知是1到1000的数了为什么还判断是否大于0呢?
我简单改了一下:
subroutine sushu(n,a,m)
integer a(n)
logical temp
m=1
do i=2,n
temp=.true.
do j=2,i-1
if(mod(i,j)==0)then
temp=.false.
exit
endif
enddo
if(temp)then
a(m)=i
m=m+1
endif
enddo
end subroutine

program sushu_pro
parameter(n=1000)
integer a(n)
call sushu(n,a,m)
do i=1,m-1
write(*,100) a(i)
enddo
100 format(1x,8i10)
end program
百度网友a57f22783
2012-06-04 · TA获得超过1655个赞
知道大有可为答主
回答量:581
采纳率:100%
帮助的人:393万
展开全部
你的程序中有好几处错误,mod那儿少了个括号,下面循环if多了括号......我帮你写了一个简单的。
program sushu_pro
implicit none
integer, parameter :: m = 1000
integer :: i

do i=2, m
call sushu(i)
end do

end program sushu_pro

subroutine sushu(n)
implicit none
integer :: n
integer :: i, tag

tag = 1
do i=2, n-1
if ( mod(n,i) == 0 ) then
tag = 0
exit
end if
end do

if (tag == 1) then
write(*,*) n
end if

end subroutine
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式