HDU 2817 A sequence of numbers
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2817
快速幂取模问题
套用模板就可以
View Code
1 #include<stdio.h> 2 #include<string.h> 3 #define M 200907 4 __int64 quickpow(__int64 m,__int64 n) 5 { 6 int b=1; 7 while(n>0) 8 { 9 if(n&1) 10 b=(b*m)%M; 11 n=n>>1;//位运算 相当于n^2 12 m=(m*m)%M; 13 } 14 return b; 15 } 16 int main() 17 { 18 __int64 n,a,b,c,d,s,m,q; 19 scanf("%I64d",&n); 20 while(n--) 21 { 22 scanf("%I64d %I64d %I64d",&a,&b,&c); 23 scanf("%I64d",&d); 24 if((b-a)==(c-b)) 25 { 26 q=(a+(b-a)*(d-1))%M; 27 printf("%I64d\n",q); 28 } 29 else 30 { 31 if(d>1) 32 { 33 s=b/a; 34 m=a*quickpow(s,d-1); 35 printf("%I64d\n",m%M); 36 } 37 else 38 printf("%I64d\n",a); 39 } 40 } 41 return 0; 42 }
模板 a^p mod m
int Montgomery(int a, int p, int m)
{
if(p==0) return 1;
int r=a%m;
int k=1;
while(p>1){
if(p&1!=0){
k=(k*r)%m;
}
r=(r*r)%m;
p/=2;
}
return (r*k)%m;
}