您的位置:首页 > 其它

HDU 2802 F(N)(数论)

2015-10-03 09:09 357 查看
Description

已知F(n)-n^3=F(n-2)-(n-1)^3,F(1)=1,F(2)=7,给出n,求F(n)%2009

Input

多组输入,每组用例占一行为一整数n,以n=0结束输入

Output

对于每个n,输出F(n)%2009

Sample Input

1

2

3

0

Sample Output

1

7

20

Solution

显然F(2*k)和F(2*k-1)的循环节都为2009,所以F(n)的循环节为4018,因此只要预处理出F(1)~F(4018)的值,每次输出F(n%4018)即可,注意4018^3会爆int,所以要用long long

Code

#include<stdio.h>
#define mod 2009
typedef long long ll;
ll f[4444];
void init()
{
f[1]=1ll;
f[2]=7ll;
for(ll i=3;i<=4018;i++)
f[i%4018]=(f[i-2]+((i*i*i)%mod-(i-1)*(i-1)*(i-1)%mod+mod)%mod)%mod;
}
int main()
{
init();
int n;
while(scanf("%d",&n),n)
{
n%=4018;
printf("%lld\n",f
);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: