(a*b)%c 问题

 

 

  给你两个数__int64 类型的整数 a ,b,c。问你,(a*b)%c的值是多少??我们知道: (a*b)%c = ((a%c)*(b%c))%c 。不过即使这样做,在c很大的情况下,(a%c)*(b%c)还是会越界。下面给出二进制的实现代码:

  

 1 #include<cstdio>
 2 #include<cstring>
 3 using namespace std;
 4 
 5 __int64 Pow(__int64 a, __int64 b, __int64 c)
 6 {
 7     a %= c;
 8     b %= c;
 9     __int64 ret = 0;   //计录(a*b)%c的值。
10     while(b)
11     {
12         if(b&1)
13             ret += a, ret %= c;
14         a <<= 1; a %= c;  //a随着b中二进制位数而扩大每次扩大两倍。
15         b >>= 1;  //b来缩小两倍 去掉最后一位 由于当前最后一位我们用完了,
16     }
17     return ret;
18 }
19 
20 int main()
21 {
22     __int64 a, b, c;
23     while(~scanf("%I64d%I64d%I64d", &a, &b, &c))
24     {
25         printf("%I64d\n", Pow(a, b, c));
26     }
27     return 0;
28 }

 

posted @ 2014-12-02 18:05  无道圣君  阅读(1925)  评论(0编辑  收藏  举报