RosettaCodeData/Task/Pernicious-numbers/Fortran/pernicious-numbers.f
2015-11-18 06:14:39 +00:00

55 lines
941 B
Fortran

program pernicious
implicit none
integer :: i, n
i = 1
n = 0
do
if(isprime(popcnt(i))) then
write(*, "(i0, 1x)", advance = "no") i
n = n + 1
if(n == 25) exit
end if
i = i + 1
end do
write(*,*)
do i = 888888877, 888888888
if(isprime(popcnt(i))) write(*, "(i0, 1x)", advance = "no") i
end do
contains
function popcnt(x)
integer :: popcnt
integer, intent(in) :: x
integer :: i
popcnt = 0
do i = 0, 31
if(btest(x, i)) popcnt = popcnt + 1
end do
end function
function isprime(number)
logical :: isprime
integer, intent(in) :: number
integer :: i
if(number == 2) then
isprime = .true.
else if(number < 2 .or. mod(number,2) == 0) then
isprime = .false.
else
isprime = .true.
do i = 3, int(sqrt(real(number))), 2
if(mod(number,i) == 0) then
isprime = .false.
exit
end if
end do
end if
end function
end program