hdu2817 A sequence of numbers(等差等比数列)

 1 #include<stdio.h>
 2 #define e 200907
 3 int main()
 4 {
 5     __int64 a,b,c,n,ans;
 6     int t;
 7     scanf("%d",&t);
 8     while(t--)
 9     {
10         scanf("%I64d%I64d%I64d%I64d",&a,&b,&c,&n);
11         if(n==1)
12         {
13             printf("%I64d\n",a%e);
14             continue;
15         }
16         if(b-a==c-b)
17         {
18             ans=(a%e+((n-1)%e*(b-a)%e)%e)%e;
19         }
20         else
21         {
22             __int64 d;
23             d=(b/a)%e;
24             a=a%e;
25             n--;
26             __int64 x=n;
27             __int64 tt=2;
28             __int64 temp=d;
29             while(x>0)
30             {
31                 while(tt<x)
32                 {
33                     temp=(temp*temp)%e;
34                     tt=tt*2;
35                 }
36                 a=(a*temp)%e;
37                 x-=tt/2;
38                 tt=2;
39                 temp=d;
40             }
41             ans=a;
42         }
43         printf("%I64d\n",ans);
44     }
45     return 0;
46 }
View Code
 1 #include<stdio.h>
 2 #define e 200907
 3 __int64 fun(__int64 a,__int64 b)
 4 {
 5     __int64 temp=1;
 6     a=a%e;
 7     while(b>0)
 8     {
 9         if(b%2!=0)
10             temp=(a*temp)%e;
11         a=(a*a)%e;
12         b=b/2;
13         
14     }
15     return temp;
16 }
17 int main()
18 {
19     __int64 a,b,c,n,ans;
20     int t;
21     scanf("%d",&t);
22     while(t--)
23     {
24         scanf("%I64d%I64d%I64d%I64d",&a,&b,&c,&n);
25         if(b-a==c-b)
26         {
27             ans=(a%e+((n-1)%e*(b-a)%e)%e)%e;
28         }
29         else
30         {
31             n--;
32             ans=(a%e)*fun(b/a,n);
33         }
34         printf("%I64d\n",ans%e);
35     }
36     return 0;
37 }
View Code

 

posted @ 2013-07-15 09:35  zlyblog  阅读(183)  评论(0)    收藏  举报