42 lines
1.1 KiB
Fortran
42 lines
1.1 KiB
Fortran
program moebius
|
|
use iso_fortran_env, only: output_unit
|
|
|
|
integer, parameter :: mu_max=1000000, line_break=20
|
|
integer, parameter :: sqroot=int(sqrt(real(mu_max)))
|
|
integer :: i, j
|
|
integer, dimension(mu_max) :: mu
|
|
|
|
mu = 1
|
|
|
|
do i = 2, sqroot
|
|
if (mu(i) == 1) then
|
|
do j = i, mu_max, i
|
|
mu(j) = mu(j) * (-i)
|
|
end do
|
|
|
|
do j = i**2, mu_max, i**2
|
|
mu(j) = 0
|
|
end do
|
|
end if
|
|
end do
|
|
|
|
do i = 2, mu_max
|
|
if (mu(i) == i) then
|
|
mu(i) = 1
|
|
else if (mu(i) == -i) then
|
|
mu(i) = -1
|
|
else if (mu(i) < 0) then
|
|
mu(i) = 1
|
|
else if (mu(i) > 0) then
|
|
mu(i) = -1
|
|
end if
|
|
end do
|
|
|
|
write(output_unit,*) "The first 199 terms of the Möbius sequence are:"
|
|
write(output_unit,'(3x)', advance="no") ! Alignment of first number
|
|
do i = 1, 199
|
|
write(output_unit,'(I2,x)', advance="no") mu(i)
|
|
if (modulo(i+1, line_break) == 0) write(output_unit,*)
|
|
end do
|
|
end program moebius
|