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==0return 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;
}

posted @ 2012-08-03 19:59  时光旅行的懒猫  阅读(173)  评论(0编辑  收藏  举报