1 条题解
-
0
自动搬运
来自洛谷,原作者为

love_luke
躺平者,皇室战争玩家搬运于
2025-08-24 22:07:54,当前版本为作者最后更新于2019-01-13 14:15:58,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
对HAY大佬的题解做一个进一步的解释(我觉得他没说清楚)
首先,这道题的数据还是比较大的,感觉用long long也会爆,先不管,开成long long。然后读入r,半径是根号r,就开个方,存在lin里。
long long r,i,sum=0,lin,a,b; scanf("%lld",&r); lin=sqrt(r);然后就到了精髓部分。其他题解都用了平方和公式,而我们不需要,使用远古算法,把每个平方的个数都求出来,然后乘起来,最后全部加起来。当然,我们只需要算一个象限加一个半轴的,最后再乘4就行了。
for (i=1;i<=lin;++i) { a=sqrt(r-i*i);//当横坐标为i时,第一象限内最多有多少个 a=(2*a+1)%1000000007;//把半轴和纵坐标为i的情况算上 b=(i*i)%1000000007;//平方 sum=(sum+a*b)%1000000007;//个数乘平方再累加 } printf("%lld",(sum*4)%1000000007);//输出
- 1
信息
- ID
- 4120
- 时间
- 1000ms
- 内存
- 16MiB
- 难度
- 4
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 上传者