A number sequence is defined as follows:
f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.
Given A, B, and n, you are to calculate the value of f(n).
f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.
Given A, B, and n, you are to calculate the value of f(n).
Inpu
The input consists of multiple test cases. Each test case contains 3 integers A, B and n on a single line (1 <= A, B <= 1000, 1 <= n <= 100,000,000). Three zeros signal the end of input and this test case is not to be processed.
Output
For each test case, print the value of f(n) on a single line.
#include <iostream>
using namespace std;
int main()
{
int a,b,n,i,f[53];
while(cin>>a>>b>>n)
{
if(a==0 && b==0 && n==0) break;
if(n==1 || n==1)
{
cout<<"1"<<endl;
continue;
}
f[1]=1,f[2]=1;
a%=7,b%=7;
for(i=3;i<=52;i++)
{
f[i]=(a*f[i-1]+b*f[i-2])%7;
if(f[i-1]==1 && f[i]==1) break;
}
i=i-2;
n%=i;
f[0]=f[i];
cout<<f[n]<<endl;
}
return 0;
}
下面是我用递归写的,不过Memory Limit Exceeded
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<cmath>
#include<iomanip>
//#define P 3.141592653
using namespace std;
int function(int A, int B, int n)
{
if (n ==1)
return 1;
else if (n == 2)
return 1;
else if (n == 3)
return (A + B ) % 7;
else if (n > 3)
return (A*function(A, B, n - 1)+B*function(A,B,n-2))%7;
}
void main()
{
int n;
int A, B;
while (cin >> A >> B >> n)
{
if (A == 0 && B == 0 && n == 0)
break;
cout << function(A, B, n) << endl;
}
system("pause");
}