回 帖 发 新 帖 刷新版面

主题:谁能帮我解释下这个程序

求3-100的所以素数:
real i,j,k
do i=3,100
  j=sqrt(real(i))
  k=2
10 do while(k.le.j.and.mod(i,k).ne.0)
   k=k+1
   enddo
20 if(k.gt.j)then
   print*,i,'is primr number'
  endif
enddo
疑问1:20行 if(k.gt.j)then?搞不懂
疑问2:怎么10行和20行有关联吗?20行不是已经跳出10行的DO WHILE循环了吗?

回复列表 (共4个回复)

沙发


求一个数i是否为素数,除数k从2开始逐渐递增至平方根j。若中间i能整除某个k,则停止do循环,说明i不是素数。若为素数,则结束循环时k的值大于j。

20行确实已跳出10行的循环。

板凳

我知道,可是为什么要这样编写?

3 楼


素数,除了1和其本身外没有别的因子。所以,将除数从2开始依次试验,若中间有能整除i的某个k,则这个k就是i的某个因子了。k最大只需到平方根即可啦。(若小于平方根时找不到因子,那大于平方根的数也就不会有因子了。)

呵呵,求素数也算很经典的一个程序了。

4 楼

你的解释很清楚!十分感谢!

我来回复

您尚未登录,请登录后再回复。点此登录或注册