求助数学题
查看原帖
求助数学题
160839
Prean楼主2020/7/24 23:27

不敢说这道题sb因为自己都看了题解

思路是题解2的qwq,那个sqrt用的是牛顿迭代,精度可以保证qwq

为啥代码WA 70分了啊。。。求纠错qwq

#include<algorithm>
#include<cstdio>
int r;
long long ans;
inline int gcd(int a,int b){
    while(b^=a^=b^=a%=b);
    return a;
}
inline double abs(double x){
    return x>0?x:-x;
}
inline double sqrt(double x){
    double x0=x/2;
    while(abs(x0*x0-x)>1e-1)x0-=(x0*x0-x)/(2*x0);
    return x0;
}
inline void work(int d){
    int t,s,k=r/d;
    for(s=1;s*s<=k;++s){
        t=sqrt(k-s*s);
        if(gcd(t,s)==1&&s*s+t*t==k){
            int x=(s*s-t*t)/2*d,y=d*s*t;
            if(x>0&&y>0&&x*x+y*y==(r/2)*(r/2))ans+=2;
        }
    }
}
signed main(){
    scanf("%d",&r);r<<=1;
    for(int i=1;i*i<=r;++i)if(!(r%i)){
        work(i);
        if(i*i!=r)work(r/i);
    }
    printf("%lld",1+ans<<2);
}
2020/7/24 23:27
加载中...