Recursive Function
Source : SCU Programming Contest 2005 Preliminary | |||
Time limit : 1 sec | Memory limit : 32 M |
Submitted : 12941, Accepted : 3290
Function f(n) is recursively defined as:
- f(n) = f(n-1) + f(n-3), n > 3
- f(n) = n, n <= 3
Write a program to calculate f(n) modulo m.
n <= 10000, 2 <= m <= 10000.
Input
There are multiple test cases. Each test case consists of two integers: n and m. n = 0 and m = 0 denotes the end of input, and you should not process this case.
Output
For each test case, print f(n) modulo m in a single line.
Sample Input
1 2 10000 999 0 0
Sample Output
1 433
Author: wiltord
/*注意n<0的情况*/
#include <iostream>
#include<stdio.h>
using namespace std;
#define MAX 10000
int a[MAX+1];
int main()
{
int n,m,i;
while(cin >> n >> m && (n!=0||m!=0))
{
if(n < 0)
{
while(n < 0)
{
n += m;
}
cout << n%m << endl;
}
else
{
for(i=0; i<=n; i++)
{
if(i < 4) a[i]=i%m;
else a[i]=(a[i-1]+a[i-3])%m;
}
cout << a[n] << endl;
}
}
return 0;
}