码迷,mamicode.com
首页 > 其他好文 > 详细

(a*b)%c 问题

时间:2014-12-02 19:05:15      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   color   sp   div   问题   log   bs   

 

 

  给你两个数__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 }

 

(a*b)%c 问题

标签:style   blog   io   color   sp   div   问题   log   bs   

原文地址:http://www.cnblogs.com/khan724/p/4138142.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!