gpt4 book ai didi

fortran - 在 Fortran 中获取直到 10000 的质数?

转载 作者:行者123 更新时间:2023-12-02 15:52:50 30 4
gpt4 key购买 nike

我正在尝试打印质数直到 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 之后)时,可以通过离开循环来优化...

参见 online fortran compiler

version with exit loop

关于fortran - 在 Fortran 中获取直到 10000 的质数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72077430/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com