So Easy!
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3343 Accepted Submission(s): 1070
Problem Description
A sequence S
n is defined as:
Where a, b, n, m are positive integers.┌x┐is the ceil of x. For example, ┌3.14┐=4. You are to calculate S n.
You, a top coder, say: So easy!
Where a, b, n, m are positive integers.┌x┐is the ceil of x. For example, ┌3.14┐=4. You are to calculate S n.
You, a top coder, say: So easy!
Input
There are several test cases, each test case in one line contains four positive integers: a, b, n, m. Where 0< a, m < 2
15, (a-1)
2< b < a
2, 0 < b, n < 2
31.The input will finish with the end of file.
Output
For each the case, output an integer S
n.
Sample Input
2 3 1 2013 2 3 2 2013 2 2 1 2013
Sample Output
4 14 4#include<cstdio> #include<iostream> using namespace std; long long c[2][2]={0},d[2]={0}; int main() { long long a=0,b=0,n=0,m=0; while(scanf("%lld%lld%lld%lld",&a,&b,&n,&m)!=EOF) { c[0][0]=2*a; c[0][1]=b-a*a; c[1][0]=1; c[1][1]=0; d[0]=2*a; d[1]=2; while(n) { long long x=0,y=0; long long p=0,q=0; if(n&1) { x=(c[0][0]*d[0]+c[0][1]*d[1])%m; y=(c[1][0]*d[0]+c[1][1]*d[1])%m; d[0]=x; d[1]=y; } n=n/2; x=(c[0][0]*c[0][0]+c[0][1]*c[1][0])%m; y=(c[0][0]*c[0][1]+c[0][1]*c[1][1])%m; p=(c[1][0]*c[0][0]+c[1][1]*c[1][0])%m; q=(c[1][0]*c[0][1]+c[1][1]*c[1][1])%m; c[0][0]=x; c[0][1]=y; c[1][0]=p; c[1][1]=q; } printf("%lld\n",(d[1]+m)%m); } return 0; }