HHUOJ 1015 圆上的点点点点点点点点点点点点点点(根号优化计算)

1015: 圆上的点点点点点点点点点点点点点点

时间限制: 1 Sec  内存限制: 128 MB
提交: 152  解决: 17

题目描述

假设圆的圆心位于(0,0),圆的"某积"公式为S=a2,请问"某积"为s的圆上有多少个以整数为坐标的点?

输入

多组测试数据,请处理到文件结束。

对于每组测试数据,只包含一个整数S。

1<=S<=2,000,000,000。

输出

输出一个整数,代表以整数为坐标的点的个数。

样例输入

253

样例输出

120

提示


没有Hint了

来源

河海ACM前辈-汪之涛



思路:

题意很明白,实际上就是遍历找符合题目的点。一开始用去遍历a,用a^2和S相比看是否符合,但是这样肯定会超时,因为数太大了。之后的想法就是,开根号S,遍历根号S看是否和a想匹配。因为可能会由于根号取整而损失精度,所以,要在根号S的附近的三个值,√S,√S-1,√S+1,这三个数如果有匹配的那么就是符合的。所以说,根号很能简化运算。之前的一道题也是用了根号才过的...一般都是10的18次方一开根号简化10的9次方数量级的运算。根号大法万岁!


代码:

#include
#include
using namespace std;
 
int main()
{   
    long int S;
    while(scanf("%d",&S)!=EOF)
    {
    double s=sqrt(S);
    int num=0;
    for(int i=1;i

 

你可能感兴趣的:(------题解------)