I was recently asked to solve the following problem:
There are 1000 lockers in a high school with 1000 students. The problem begins with the first student opening all 1000 lockers; next the second student closes lockers 2,4,6,8,10 and so on to locker 1000; the third student changes the state (opens lockers closed, closes lockers open) on lockers 3,6,9,12,15 and so on; the fourth student changes the state of lockers 4,8,12,16 and so on. This goes on until every student has had a turn.
How many lockers will be open at the end?
Having written two versions which both produce the correct answer, I thought it would be worth comparing their performance. A test file was created which would run each version 100 times and average the times. Version 1 took an average of 96255.61 nanoseconds whereas version 2 took 65891.69 nanoseconds.