Problem 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
#include<stdlib.h> #include<string.h> #include<stdio.h> #include<ctype.h> #include<math.h> #include<queue> using namespace std; int n, m, k, sum, count; int num[110000]; int f[110000]; int main() { int i, j, q, p, t, flag, cas; int x, y, z; f[1]=1; f[2]=7; for( i=3;i<=4018;i++ ) { f[i]=( f[i-2]+3*i*i-3*i+1 )%2009; } while( scanf( "%d",&n ),n ) { if( n<=4018 ) { printf( "%d\n",f[n] ); } else { printf( "%d\n",f[n%4018] ); } } return 0; }
1^3+...+( n*2-1 )^3=n^2*( 2*( n^2 )-1 )