Description
Giving the N, can you tell me the answer of F(N)?
Input
Each test case contains a single integer N(1<=N<=10^9). The input is terminated by a set starting with N = 0. This set should not be processed.
Output
For each test case, output on a line the value of the F(N)%2009.
Sample Input
1 2 3 0
Sample Output
1 7 20
因为这一个是对2009取余数,数据并且又比较大,所以会有规律,也就是先打表到4018,然后那对4018取余数
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<algorithm>
#include<iostream>
using namespace std;
#define N 110
#define INF 0x3f3f3f3f
double p[N];
int m[N];
double dp[N*N];
int f[5100];
int get(int x)
{
int r1=((x*x)%2009*x)%2009;
int y=x-1;
int r2=((y*y)%2009*y)%2009;
return ((f[x-2]+r1)%2009+2009-r2)%2009;
}
int main()
{
int i, n;
f[1]=1;
f[2]=7;
for(i=3;i<=4018;i++)
{
f[i]=get(i);
}
while(scanf("%d", &n), n)
{
n=n%4018;
if(n==0)
printf("0\n");
else
printf("%d\n", f[n]);
}
return 0;
}
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<algorithm>
#include<iostream>
using namespace std;
#define N 110
#define INF 0x3f3f3f3f
double p[N];
int m[N];
double dp[N*N];
int f[5100];
int get(int x)
{
int r1=((x*x)%2009*x)%2009;
int y=x-1;
int r2=((y*y)%2009*y)%2009;
return ((f[x-2]+r1)%2009+2009-r2)%2009;
}
int main()
{
int i, n;
f[1]=1;
f[2]=7;
for(i=3;i<=4018;i++)
{
f[i]=get(i);
}
while(scanf("%d", &n), n)
{
n=n%4018;
if(n==0)
printf("0\n");
else
printf("%d\n", f[n]);
}
return 0;
}