我正在尝试打印质数直到 10000。(显示前五个用于测试) 这是我的程序
program primes
implicit none
integer :: array(1229)
integer :: i, ind
logical :: is_prime
ind = 1
do i = 2, 10000, 1
if (is_prime(i) .eqv. .true.) then
array(ind) = i
ind = ind + 1
end if
end do
print *, array(1)
print *, array(2)
print *, array(3)
print *, array(4)
print *, array(5)
end program primes
function is_prime(n) result(ispr)
implicit none
integer :: c, i
integer, intent(in) :: n
logical :: ispr
c = 0
do i = 2, n
if (mod(i,2) == 0) then
c = c + 1
end if
end do
ispr = (c == 0)
end function is_prime
我不知道为什么,但这是输出
9175178
6417360
5374044
6750309
7536745
为什么会出现这种情况以及如何纠正?
最佳答案
is_prime 应该是(n 是 n 除了 1 <=> c == 1 之外唯一的除法器)
function is_prime(n) result(ispr)
implicit none
integer :: c, i
integer, intent(in) :: n
logical :: ispr
c = 0
do i = 2, n
if (mod(n,i) == 0) then
c = c + 1
end if
end do
ispr = (c == 1)
end function is_prime
当 c == 1 且 i < n(向 c 加 1 之后)时,可以通过离开循环来优化...
关于fortran - 在 Fortran 中获取直到 10000 的质数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72077430/