This site is Perl specific. So while some here do know a lot of math, we should keep on track.

So while I will answer it, I will try to make the answer touch on Perl where I can. (I probably won't be very successful though.)

First of all how do you reverse the digits of a number? Well in Perl the easiest way is:

$reversed = reverse $number;
Be careful using this though, reverse does very different things in scalar and list context. (In this case you are assigning to a scalar so you are in scalar context. If you are in doubt you can use the scalar operator to guarantee scalar context. List context is the default.)

Now the entire operation you give is a big shell game. There is exactly one concept. The concept is called the modulus of a number. If you look in perlop you will find that the % operator calculates the remainder that you get when one number is divided by another and they call it the modulus.

Sounds trivial. But a key insight that dates back to Gauss is that for most divisibility questions it is quite sufficient to replace all of your numbers with what they are "congruent to modulo" what you will divide by in the end. (Two are congruent if they have the same remainder.) More than that, thinking this way usually drastically simplifies the problem. For instance type the following into a shell (play around with the quotes if you are on DOS):

perl -pe '$_ = $_%9 . "\n"'
Then try typing a bunch of numbers and you will get the remainders mod 9.

Try that with the numbers in your calculation. You will find that 345612 has 3 as a remainder. Reverse it to get 216543 and the remainder is 3 again. Subtract one from the other and you get 129069 which has a remainder of 0. Hmm, it is divisible by 9! Then remove your digit and you get 12909 which has a remainder of 3. (3+6 is 9, and is what you removed. Hmmm.) Then as you reduce it you keep on getting remainders of 3, until you find that 3 has a remainder of 3. Then 9-3 gives you back 6, amazing.

For those who haven't got the point, here it is. When you think about the world modulo 9 you see 1, 10, 100, 1000, and so on all as 1. (Because 0, 9, 99, 999 and so on are all divisible by 9.) Therefore modulo 9 a number is the same as the sum of its digits. So you took a number. Then you reverse its digits (leaves the remainder alone). Now subtract one from the other. (Now you have something that is divisible by 9.) Now subtract a digit and you change the remainder. Now summing repetitively calculates the remainder mod 9 in a non-obvious way. So in your case you removed a 6 and got a remainder of 3 (which is -6 in mod 9 land). Now take 9 and subtract 3, and mod 9 you are now working out -(-6)=6 mod 9.

Oh, and why the rules on 9? Well mod 9, 9 is 0 so you would get 0. While mod 9 that is right, most people don't see the world mod 9 so they won't be so impressed. (In fact if they did see the world mod 9 they wouldn't be impressed in the first place.)

That is the thing about most of these tricks. They look very impressive to people who are missing a few general principles, but if you know the principles they are pretty straightforward to unravel.


In reply to Re (tilly) 1: Math Question by tilly
in thread Math Question by Martin A

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.