55 lines
941 B
Fortran
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
|