不敢说这道题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);
}