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

标签 fortran primes

我正在尝试打印质数直到 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/

相关文章:

c - 在 C 中搜索素数时遇到问题

java - 在 Java 中使用递归的主要因素

parallel-processing - 如何确保我的Fortran FORALL结构被并行化?

c - C 中的素数程序

c++ - 我的循环寻找素数的问题

Fortran 子例程/函数参数名称和声明

prolog - 生成素数列表

pointers - 在子例程中分配数组并将其传回时,FORTRAN 中的内存泄漏问题

c - 将二维数组从 Fortran 传递到 C

python - 使用 ctypes 在 Python 中调用 Fortran 共享库