Problem. closed doors; on pass you toggle every -th door. Which doors end open?
Answer: exactly the perfect squares, so doors (10 of 100).
long long openDoors(long long n) { long long r = sqrtl((long double)n); while (r * r > n) r--; while ((r + 1) * (r + 1) <= n) r++; return r; }Proof: door j is open iff j is a perfect square
Door is toggled once for every divisor of , so it ends open iff is odd. Divisors pair up as ; the pairing is perfect unless , i.e. is a square, which leaves one unpaired divisor. Hence is odd iff is a perfect square. Checked by simulation for all .
Related: Arithmetic Functions.