@Aamir: Okay. How about this:
Write A = 10000 * ahi + alo, where 0 < alo < 10000; i.e.
ahi = A/10000 and alo = A%10000.
Then A*A = 100000000 * ahi * ahi + 20000 * ahi * alo + alo * alo,
so A*A%Mod = (100000000 * ((ahi * ahi) % (Mod/100000000)) + 10000 *
((2 * ahi * alo) % (Mod/10000)) + alo * alo % Mod) % Mod

This simplifies to (100000000*(ahi*ahi)%10) + 10000*((2*ahi*alo)
%100000 + (alo*alo)%Mod)%Mod

Dave

On Apr 14, 11:09 am, AAMIR KHAN <ak4u2...@gmail.com> wrote:
> On Thu, Apr 14, 2011 at 9:08 PM, Dave <dave_and_da...@juno.com> wrote:
> > @AAmir: The easiest way is to declare A as long long int. Be sure to
> > change the printf format string.
>
> > I know that. But since i want to have only the last 9 digits of the answer
>
> that can be accommodated in int only so there is no need for long long i
> think.
>
>
>
> >  Dave
>
> > On Apr 14, 8:31 am, AAMIR KHAN <ak4u2...@gmail.com> wrote:
> > > #include<cstdio>
> > > #define MOD (int)1e9
> > > using namespace std;
> > > int main() {
> > >    int A = 33554432;
> > >    printf("%d\n",A*A);
> > >    printf("%d\n",((A*A)%MOD));
> > >    return 0;
>
> > > }
>
> > > How can i calculate, lets say last 9 digits of square of 33554432 ?
>
> > > Thanks,
> > > Aamir
>
> > --
> > You received this message because you are subscribed to the Google Groups
> > "Algorithm Geeks" group.
> > To post to this group, send email to algogeeks@googlegroups.com.
> > To unsubscribe from this group, send email to
> > algogeeks+unsubscr...@googlegroups.com.
> > For more options, visit this group at
> >http://groups.google.com/group/algogeeks?hl=en.- Hide quoted text -
>
> - Show quoted text -

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to algogeeks@googlegroups.com.
To unsubscribe from this group, send email to 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.

Reply via email to