Here's Russian with a for loop. Why does this work?
int Russian(int a, int b) // implements Russian Peasant Algorithm { int x = a, y = b, z = 0, i; for (i = 0; i < log(a); i++) { if ( 1 == x % 2) z += y; y <<= 1; x >>= 1; } return z; }
Upper bound is easy.