52 lines
901 B
Forth
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
|