杭电ACM2576
2015-12-13 10:11
281 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2576
题目大意:求前n项和的前n项和
解题思路:递推公式:Sn = n(n+1)(n+2)/6, 因为数字太大,我们把它分为两个部分来求解:s1
= (n(n+1))% (20090524*6),s2 = (s1*(n+2)/6)%20090524,因为sn一定是个整数,因此要保证n(n+1)(n+2)能被6整除,第一个公式中余数包含6是为了让s1能被6整除。
AC代码:
#include <iostream>
using namespace std;
#define mode 20090524
int main()
{
int t;
long long n;
long long sum;
while(cin>>t)
{
while(t--)
{
cin>>n;
if(n==1){cout<<1<<endl;continue;}
sum = (n*(n+1))%(mode*6);
sum = (sum*(n+2)/6)%mode;
cout<<sum<<endl;
}
}
return 0;
}
题目大意:求前n项和的前n项和
解题思路:递推公式:Sn = n(n+1)(n+2)/6, 因为数字太大,我们把它分为两个部分来求解:s1
= (n(n+1))% (20090524*6),s2 = (s1*(n+2)/6)%20090524,因为sn一定是个整数,因此要保证n(n+1)(n+2)能被6整除,第一个公式中余数包含6是为了让s1能被6整除。
AC代码:
#include <iostream>
using namespace std;
#define mode 20090524
int main()
{
int t;
long long n;
long long sum;
while(cin>>t)
{
while(t--)
{
cin>>n;
if(n==1){cout<<1<<endl;continue;}
sum = (n*(n+1))%(mode*6);
sum = (sum*(n+2)/6)%mode;
cout<<sum<<endl;
}
}
return 0;
}
相关文章推荐
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- C++实现汉诺塔算法经典实例
- PHP实现克鲁斯卡尔算法实例解析
- C#获取关键字附近文字算法实例