平方和求余
2193: 校赛的纪念
Time Limit: 1 Sec Memory Limit: 512 MBSubmit: 815 Solved: 154
[Submit][Status][BBS]
Description
作为成都东软学院的第一届个人校赛,这一天是我们ACM团队的所有成员所应该铭记的日子。而作为我们的总教练余大牛又想出了一个简单的问题作为对今日比赛的纪念,其实题目很简单,仅仅是计算平方和。但是,为了体现对今天的纪念,余大牛要求结果对20121215(今天的日期)取余。
例如:当n等于3时,ans=1^2+2^2+3^2=14
Input
一个整数n ( 0 <= n <= 1000000)
注意:测试数据包含多个
Output
输出题目要求的结果
Sample Input
2
3
Sample Output
5
14
HINT
有两种方法:
1:用平方和公式
![](https://images2015.cnblogs.com/blog/780817/201603/780817-20160314085227287-111968997.png)
这样算然后直接求余,就可以避免一直重复的平方,一直算很大的数,可以节省很多时间,更要注意数字很大,要用longlong
#include <stdio.h> int main() { long long n,sum; while(scanf("%lld",&n)!=EOF) { sum=n*(n+1)*(2*n+1)/6; printf("%lld\n",sum%20121215); } return 0; }
2:用余数定理
![](https://images2015.cnblogs.com/blog/780817/201603/780817-20160314085515256-647135356.jpg)
这样可以避免很大的数对20121215取余产生错误,所以拆开来分别取余,但是这样比较浪费时间
#include <stdio.h> int main() { long long i,n,sum,ans; while(~scanf("%lld",&n)) { sum = 0; for(i=1;i<=n;i++) { ans = i*i % 20121215; sum = (sum + ans)%20121215; } printf("%lld\n",sum); } return 0; }