! A Naive solution of the 235-problem. ! Coded by Siva (siva@cse.iitb.ernet.in) on Aug 6, 2000 Program p235 ! ! first declare all the variables you need Integer :: which, counter, current ! and the function types Logical :: test235 ! To Keep track of CPU usage use these two vars. Real :: tstart, tend ! Ask the user which number he wants. Write (*,*) "Find which-th number? -> " Read (*,*) which ! Initialize counter counter = 0 ! start from 1 current = 1 ! set start timer Call CPU_TIME (tstart) !keep going until we get enough numbers Do ! have we found enough numbers. if yes stop trying more. If (counter == which) Exit ! check current number. if it is a 235-number increment counter. If (test235(current)) counter = counter + 1 ! move to next number current = current + 1 End Do ! check how much cpu time has elapsed Call CPU_TIME (tend) ! show the user the answer Write (*,*) "The ", which, "-th 235-number is: ", current - 1 Write (*,*) "It took ", tend - tstart, " seconds of CPU time." End Program p235 Logical Function test235 (n) ! Purpose: We take a number n as input and test it. ! We return true if it is a 235-number. else false. ! ! define the argument Integer, Intent (In) :: n ! ! we divide repeatedly by 2 first, 3 second and 5 last ! while the number is divisible by 2, 3, 5 ! Use variable quot to store the quotient Integer :: quot ! quot = n ! ! repeatedly divide by 2 while number is even Do If (Mod(quot, 2) < > 0) Exit quot = quot / 2 End Do ! ! then by 3 while it is divisble Do If (Mod(quot, 3) < > 0) Exit quot = quot / 3 End Do ! ! finally by 5 while it is divisible Do If (Mod(quot, 5) < > 0) Exit quot = quot / 5 End Do ! test235 = (quot == 1) ! End Function test235