function MOD(m: integer, n: integer): integer (* standard library function *) m - m/n * n function divides(x: integer, n: integer): boolean (* returns true if x is a factor of n, for 0 < x <= n *) not MOD(n, x) function count(bit: integer, n: integer): integer (* returns the number of time bit occurs as a digit in n. *) (* intended use is for bit in (0,1) and a binary n *) if n < 10 then bit = n else if bit = MOD(n, 10) then 1 + count(bit, n/10) else count(bit, n/10) function to_binary(m: integer): integer (* converts a decimal number n to its binary equivalent *) if n = 0 then 0 else 10 * to_binary(n/2) + MOD(n,2) function apply_definition(binary_n: integer, n: integer): boolean (* computes the definition of is_special?, for binary number bin_n *) divides(count(true, binary_n), n) and divides(count(false, binary_n), n) function main(n: integer): integer apply_definition(to_binary(n), n)