我希望我没有重复任何问题,但建议的主题没有提供任何类似的问题。我有一个检查数字是否是素数的功能。现在这是寻找素数的最慢方法。
subroutine is_prime_slow(num, stat)
implicit none
logical :: stat
integer :: num
integer :: i
if ((num .le. 3) .and. (num .gt. 1)) then
stat = .true.
return
end if
! write(*,*) 'limit = ',limit
do i = 2,num - 1
! write(*,*) 'mod(',limit,i,') = ',mod(limit,i)
if (mod(num,i) == 0) then
stat = .false.
return
end if
end do
stat = .true.
return
end
现在假设我对其进行了一些改进。
subroutine is_prime_slow(num, stat)
implicit none
logical :: stat
integer :: num
integer :: i
if ((num .le. 3) .and. (num .gt. 1)) then
stat = .true.
return
end if
! IMPROVEMENT
if ((mod(num,2) == 0) .or. (mod(num,3) == 0) .or. (mod(num,5) == 0) .or. (mod(num,7) == 0)) then
stat = .false.
return
end if
! write(*,*) 'limit = ',limit
do i = 2,num - 1
! write(*,*) 'mod(',limit,i,') = ',mod(limit,i)
if (mod(num,i) == 0) then
stat = .false.
return
end if
end do
stat = .true.
return
end
现在第二个版本排除了一半以上的数字,例如所有可以被 2、3、5、7 整除的数字。当我使用 linux 'time' 程序定时执行时,'改进'版本的执行速度怎么可能一样慢?我错过了一些明显的技巧吗?
Searching the first 900000 numbers:
1st: 4m28sec
2nd 4m26sec