(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 }

 

你可能感兴趣的:(问题)