您的位置:首页 > 其它

hdu 2082 F(N)

2016-03-29 01:38 155 查看
hdu 2802

思路:
法一:寻找循环节;
法二:公式法
F(N)−F(N−2)=N3−(N−1)3
F(3)−F(1)=33−23
F(4)−F(2)=43−33
F(5)−F(3)=53−43
F(6)−F(4)=63−53

F(N)−F(N−2)=N3−(N−1)3
错位相减得:
F(N)+F(N−1)=N3
同理:
若N为奇数:F(N)=13−23+33−43+...+N3;
若N为偶数:F(N)=−13+23−33+43−...−N3;
令:S1(n)=13−23+33−43+...+n3
13−23=13−(1+1)3=−(3∗12+3∗1+1)
33−43=33−(3+1)3=−(3∗32+3∗3+1)

S1(n)=−(3∗(12+32+...+(n−2)3)+3∗(1+3+...+(n−2))+(n−1)2)+n3
可得:
N为奇数时:(N+1)2(2N−1)4;
N为偶数时:N2(2N+3)4;

#include <iostream>
#include <cstdio>
#define MOD 2009
#define LL __int64

using namespace std;

int main()
{
int n;

while (~scanf("%d", &n) && n)
{
if (n % 2 == 0)
{
LL a = n / 2;
printf("%I64d\n", (a % MOD * a % MOD * (2 * n + 3) % MOD) % MOD);
}
else
{
LL a = (n + 1) / 2;
printf("%I64d\n", (a % MOD * a % MOD * (2 * n - 1) % MOD) % MOD);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息