Solution (source code)

= Solution

Test each possible positive <divisor> directly:
``
PROCEDURE divisors(n: INTEGER): INTEGER;
VAR i, count: INTEGER;
BEGIN
  i := 1; count := 0;
  WHILE i <= n DO
    IF n MOD i = 0 THEN count := count + 1 END;
    i := i + 1
  END;
  RETURN count
END divisors;
``
For $n\geq1$, the <loop invariant> is $1\leq i\leq n+1$ and `count` $=|\{d:1\leq d<i,\ d\mid n\}|$. Testing $i$ adds exactly the next possible <divisor>. The <loop variant> $n+1-i$ decreases, and the divisor in `MOD` is always positive. At exit the interval $1\leq d\leq n$ contains every positive <divisor>. \b[This computes the <divisor function> $\tau(n)$ using $n$ remainder operations, $\Theta(n)$ time, and $O(1)$ auxiliary space.]