#include<stdio.h>
#define max 4019
int main()
{
int i,n,k,a[max]={0,1,7};
for(i=3;i<max;i++)
{
a[i]=(a[i-2]-(i-1)*(i-1)*(i-1)+i*i*i)%2009;
}
while(scanf("%d",&n),n)
{
k=n%4018;
printf("%d\n",a[k]);
}
return 0;
}
找规律利用for(i=3;i<max;i++)
{
a[i]=(a[i-2]-(i-1)*(i-1)*(i-1)+i*i*i)%2009;
}
for(i=3;i<6000;i++)
{
if(a[i]==1&&a[i+1]==7)
{
n=i;
printf("%d\n",n);
break;
}
}找到了f(n)为1, 7 ,44.......每4018为一个周期,即a[1]=1;a[4019]=1;a[2]=7,a[4020]=2;
然后打表把前4018个数存于数组中,然后输入的n对4018取余k=n%4018; printf("%d\n",a[k]);即可