The full question is:
Suppose that row of closed rooms are numbered 1,2,3,…. up to a user specified number of room (N). Beginning with room 2, we open the doors of all the even-numbered rooms. Next, beginning with room 3, we go to every third room, if the room number is even then we open its door if its closed and close it if it is open. We repeat this procedure with every fourth room, then every fifth room (if the room number is even), and so on. Write a program to determine which rooms will be closed when this procedure is completed.
for N=50 the answer should be: 1,3,4,5,7,9,11,13,15,16,17,19,21,23,25,27,29,31,33,35,36,37,39,41,43,45,47,49
I have it working a bit, but missing 16, and 36
my code for it is;
PROGRAM P1
IMPLICIT NONE
INTEGER, ALLOCATABLE :: Y(:)
LOGICAL, ALLOCATABLE :: X(:)
INTEGER ::N,I,Z
PRINT *, "PLEASE ENTER N"
READ*,N
Z=0
ALLOCATE(Y(N),X(N))
DO I=1,N
Y(I)=I
IF (0==MOD(I,2)) THEN
X(I)=.TRUE.
ELSE
X(I)=.FALSE.
END IF
IF (I==2) THEN
X(I)=.FALSE.
END IF
END DO
DO I=1,N
DO Z=0,N,I
IF (Z==0 .OR. Z==4 .OR. I==2) CYCLE
IF (I==2) EXIT
IF (0==MOD(I,Z)) THEN
X(I)=.NOT.X(I)
END IF
END DO
END DO
DO I=1,N
IF(X(I) .EQV. .TRUE.) THEN
PRINT *, Y(I)
END IF
END DO
DEALLOCATE(Y,X)
END PROGRAM P1