

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.




/* NetRexx */
options replace format comments java crossref symbols nobinary utf8
numeric digits 5000 -- set up numeric precision
 
babbageNr = babbage() -- call a function to perform the analysis and capture the result
babbageSq = babbageNr ** 2  -- calculate the square of the result
-- display results using a library function
System.out.printf("%,10d\u00b2 == %,12d%n", [Integer(babbageNr), Integer(babbageSq)])
return
 
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- A function method to answer Babbage's question:
--   "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.)
 
method babbage() public static binary
  n = int 104 -- (integer arithmatic)
  -- begin a processing loop to determine the value
  -- starting point: 104
  loop while ((n * n) // 1000000) \= 269696
    -- loop continues while the remainder of n squared divided by 1,000,000 is not equal to 269,696 
    if n // 10 == 4 then do
      -- increment n by 2 if the remainder of n divided by 10 equals 4
      n = n + 2
      end
    if n // 10 == 6 then do
      -- increment n by 8 if the remainder of n divided by 10 equals 6
      n = n + 8
      end
    end
 
  return n -- end the function and return the result
 