

Charles Babbage, looking ahead to the sorts of problems his Analytical Engine would be able to solve, gave this example:

 What is the smallest positive integer whose square ends in the digits 269,696?

— Babbage, letter to Lord Bowden, 1837; see Hollingdale and Tootill, Electronic Computers, second edition, 1970, p. 125.

He thought the answer might be 99,736, whose square is 9,947,269,696; but he couldn't be certain.



Task[edit]
The task is to find out if Babbage had the right answer — and to do so, as far as your language allows it, in code that Babbage himself would have been able to read and understand.
As Babbage evidently solved the task with pencil and paper, a similar efficient solution is preferred.

For these purposes, Charles Babbage may be taken to be an intelligent person, familiar with mathematics and with the idea of a computer; he has written the first drafts of simple computer programmes in tabular form. [Babbage Archive Series L].



Motivation
The aim of the task is to write a program that is sufficiently clear and well-documented for such a person to be able to read it and be confident that it does indeed solve the specified problem.




COMMENT text between pairs of words 'comment' in capitals are
        for the human reader's information and are ignored by the machine
COMMENT
 
COMMENT Define s to be the integer value 269 696              COMMENT
INT s = 269 696;
 
COMMENT Name a location in the machine's storage area that will be
        used to hold integer values.
        The value stored in the location will change during the
        calculations.
        Note, "*" is used to represent the multiplication operator.
              ":=" causes the location named to the left of ":=" to
                   assume the value computed by the expression to the right.
              "sqrt" computes an approximation to the square root
                     of the supplied parameter
              "MOD" is an operator that computes the modulus of its
                    left operand with respect to its right operand
              "ENTIER" is a unary operator that yields the largest
                      integer that is at most its operand.
COMMENT
INT v := ENTIER sqrt( s );
 
COMMENT the construct: WHILE...DO...OD repeatedly executes the
        instructions between DO and OD, the execution stops when
        the instructions between WHILE and DO yield the value FALSE.
COMMENT 
WHILE ( v * v ) MOD 1 000 000 /= s DO v := v + 1 OD;
 
COMMENT print displays the values of its parameters
COMMENT
print( ( v, " when squared is: ", v * v, newline ) )