您的位置:首页 > 其它

杭电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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  acm 杭电 算法