这道题只要找出规律就会知道怎么做!一看到这种题目就要想想有没有循环!
而这题循环是4018,至于为什么自己可以写代码观察!
找出循环点的代码:
#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=10000;
int a[maxn];
int main()
{
// int f[maxn];
a[1]=1;
a[2]=7;
for(int i=3; i<maxn;i++)
{
a[i]=a[i-2]-(i-1)*(i-1)*(i-1)+i*i*i;
a[i]=a[i]%2009;
cout<<i<<": "<<a[i]<<endl;
}
return 0;
}
而这题的代码如下:
#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=10000;
int a[maxn];
void mm()
{
a[1]=1;
a[2]=7;
for(int i=3; i<maxn;i++)
{
a[i]=a[i-2]-(i-1)*(i-1)*(i-1)+i*i*i;
a[i]=a[i]%2009;
}
}
int main()
{
mm();
int n;
while(cin>>n,n)
{
printf("%d\n",a[n%4018]);
}
return 0;
}