RosettaCodeData/Task/Population-count/Fortran/population-count.f

52 lines
901 B
Forth

program population_count
implicit none
integer, parameter :: i64 = selected_int_kind(18)
integer(i64) :: x
integer :: i, n
x = 1
write(*, "(a8)", advance = "no") "3**i :"
do i = 1, 30
write(*, "(i3)", advance = "no") popcnt(x)
x = x * 3
end do
write(*,*)
write(*, "(a8)", advance = "no") "Evil :"
n = 0
x = 0
do while(n < 30)
if(mod(popcnt(x), 2) == 0) then
n = n + 1
write(*, "(i3)", advance = "no") x
end if
x = x + 1
end do
write(*,*)
write(*, "(a8)", advance = "no") "Odious :"
n = 0
x = 0
do while(n < 30)
if(mod(popcnt(x), 2) /= 0) then
n = n + 1
write(*, "(i3)", advance = "no") x
end if
x = x + 1
end do
contains
integer function popcnt(x)
integer(i64), intent(in) :: x
integer :: i
popcnt = 0
do i = 0, 63
if(btest(x, i)) popcnt = popcnt + 1
end do
end function
end program