hdu2035【二分快速幂】

  求AˆB取模。直接二分快速幂即可。比如9ˆ9=(9ˆ2)ˆ4 * 9,将B一直模2然后A自乘,复杂度long(n)。

  

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5
 6 int quickpow(int a, int b, int mod) {
 7     int ans = 1;
 8     while(b) {
 9         if(b & 1) {
10             ans = ans * a % mod;
11         }
12         a  = a * a % mod;
13         b >>= 1;
14     }
15     return ans;
16 }
17
18 int main() {
19     int a, b;
20     while(scanf("%d%d", &a, &b), a + b) {
21         printf("%d\n", quickpow(a, b, 1000));
22     }
23     return 0;
24 }
25    
时间: 2024-10-11 17:36:03

hdu2035【二分快速幂】的相关文章

HDU 4549 (费马小定理+矩阵快速幂+二分快速幂)

M斐波那契数列 Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u Submit Status Description M斐波那契数列F[n]是一种整数数列,它的定义如下: F[0] = a F[1] = b F[n] = F[n-1] * F[n-2] ( n > 1 ) 现在给出a, b, n,你能求出F[n]的值吗? Input 输入包含多组测试数据: 每组数据占一行,包含3个整数a,

Poj 3233 Matrix Power Series(矩阵二分快速幂)

题目链接:http://poj.org/problem?id=3233 解题报告:输入一个边长为n的矩阵A,然后输入一个k,要你求A + A^2 + A^3 + A^4 + A^5.......A^k,然后结果的每个元素A[i][j] % m.(n <= 30,k < 10^9,m < 10^4) 要用到矩阵快速幂,但我认为最重要的其实还是相加的那个过程,因为k的范围是10^9,一个一个加肯定是不行的,我想了一个办法就是我以k = 8为例说明: ans = A + A^2 + A^3 +

二分快速幂 [FOJ ] 1752

Problem 1752 A^B mod C Accept: 750    Submit: 3205Time Limit: 1000 mSec    Memory Limit : 32768 KB  Problem Description Given A,B,C, You should quickly calculate the result of A^B mod C. (1<=A,B,C<2^63).  Input There are multiply testcases. Each tes

poj 1995 Raising Modulo Numbers 二分快速幂

题意:给定n对Ai,Bi,求所有Ai的Bi次方之和对M取模的结果: 思路:二分法求快速幂: #include<cstdio> #include<cstring> #include<algorithm> using namespace std; __int64 sum,x,y,t; __int64 mod(__int64 a,__int64 b,__int64 c) { if(b==0) return 1%c; if(b==1) return a%c; t=mod(a,b

二分快速幂(蒙哥马利)伪代码

返回 a^b mod c 的值 1 int montgomery(int a, int b, int c) 2 { 3 int ans = 1; 4 while (b) { 5 if (b & 1) 6 ans = ans * a % c; 7 b >>= 1; 8 a = a * a % c; 9 } 10 return ans; 11 }

nod_1004 n^n的末位数字(二分快速幂)

题意: 给出一个整数N,输出N^N(N的N次方)的十进制表示的末位数字. Input 一个数N(1 <= N <= 10^9) OutPut 输出N^N的末位数字 思路: EASY,,,,,, 代码: int calc(int t,int n){ if(n==0) ret 1; if(n==1) ret t; int s=calc(t,n/2); s=s*s%10; if(n&1){ s=s*t%10; } ret s; } int main(){ int n; cin>>

一些数学基础(辗转相除法、筛法、快速幂)

看个题目 1 #include<iostream> 2 using namespace std; 3 int gcd(int a,int b) 4 { 5 if(b==0) 6 { 7 return a; 8 } 9 else 10 { 11 return gcd(b,a%b); 12 } 13 } 14 int main() 15 { 16 int t; 17 cin>>t; 18 while(t--) 19 { 20 int n,a,b; 21 cin>>n>

【矩阵快速幂】HDU 4549 : M斐波那契数列(矩阵嵌套)

[题目链接]click here~~ [题目大意] M斐波那契数列F[n]是一种整数数列,它的定义如下: F[0] = a F[1] = b F[n] = F[n-1] * F[n-2] ( n > 1 ) 现在给出a, b, n,你能求出F[n]的值吗?对每组测试数据请输出一个整数F[n],由于F[n]可能很大,你只需输出F[n]对1000000007取模后的值即可,每组数据输出一行. [Source] :2013金山西山居创意游戏程序挑战赛――初赛(2) [解题思路] 这个题稍微有点难度,就

LightOJ 1132 - Summing up Powers 矩阵快速幂+排列组合

链接:http://lightoj.com/volume_showproblem.php?problem=1132 1132 - Summing up Powers PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB Given N and K, you have to find (1K + 2K + 3K + ... + NK) % 232 Input Input starts with an i