And*_*dro 2 algorithm primes fortran
我希望我没有重复任何问题,但建议的主题没有提供任何类似的问题.我有一个功能,检查一个数字是否是一个主要的数字.现在这是搜索素数的最慢的方法.
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
Run Code Online (Sandbox Code Playgroud)
现在让我们说我做了一些改进.
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
Run Code Online (Sandbox Code Playgroud)
现在第二个版本排除了超过一半的数字,例如所有可被2,3,5,7整除的数字.当我使用linux'time'程序执行时间时,"改进"版本执行速度是否有可能?我错过了一些明显的伎俩吗
Searching the first 900000 numbers:
1st: 4m28sec
2nd 4m26sec
Run Code Online (Sandbox Code Playgroud)