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;
}

你可能感兴趣的:(sequence)