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

poj_1995 Raising Modulo Numbers (快速幂)

时间:2018-07-14 14:42:07      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:二进制   using   std   iostream   numbers   快速   style   注意   main   

【题目链接】

  http://poj.org/problem?id=1995

【算法】

  1. 基本快速幂(二进制思想)
  2. 注意两个int相乘可能溢出,加(long long)但是相乘不要加括号,不然会先溢出在类型转换
 1 #include <iostream>
 2 using namespace std;
 3 int z,m,h,cur,ans,a,b;
 4 void calc()
 5 {
 6     cin>>a>>b;
 7     cur = 1 % m;
 8     for(; b; b >>= 1) {
 9         if(b & 1) cur = (long long)cur * a % m;
10         a = (long long)a * a % m;
11     }
12     ans = (long long)(ans+cur) % m;
13 }
14 int main()
15 {
16     cin>>z;
17     while(z--)
18     {
19         ans = 0;
20         cin>>m>>h;
21         while(h--) calc();
22         cout << ans%m << endl;
23     }
24 }

 

poj_1995 Raising Modulo Numbers (快速幂)

标签:二进制   using   std   iostream   numbers   快速   style   注意   main   

原文地址:https://www.cnblogs.com/Willendless/p/9309225.html

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