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;
思路:
法一:寻找循环节;
法二:公式法
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); } } }
相关文章推荐
- 1.m分解阶乘之和
- 2.几种递推数
- 3.欧拉函数
- 4.快速幂模m算法
- 5.扩展欧几里得&&中国剩余定理
- 6.数论_web
- Project Euler Problem 387 - Harshad Numbers - 深度优先
- 编程之美2015初赛A
- 数论题集
- 原根
- 阶与原根学习笔记
- HDU 1299 Diophantus of Alexandria
- Leftmost Digit(HDU 1060)
- Rightmost Digit(HDU 1061)
- Python-在奇数中寻找素数
- ZOJ 2674 Strange Limit 欧拉定理
- LeetCode-Palindrome Number
- 组合数求模总结
- Sicily 1047 Super Snooker
- 【数论】组合数求模