数学题 80pts 求调

P2508 [HAOI2008] 圆上的整点

```cpp #include <bits/stdc++.h> #define int long long using namespace std; int r; //inline void outs(int a,int b) //{ cout<<"( x , y ) = ( "<<a<<" , "<<b<<" )"<<endl; //} inline int gcd(int a,int b) { while(b^=a^=b^=a%=b); return a; } inline int cal(int k) { int d=r/k,ret=0; for(int m=1;m*m<=k;++m) { int n=sqrt(k-m*m); if(n*n+m*m!=k) continue; if(gcd(n,m)!=1) continue; int x=d*(m*m-n*n)/2; int y=d*n*m; if(x>0&&y>0&&x*x+y*y==r*r/4) /*outs(x,y),*/++ret; } return ret; } signed main() { cin>>r,r<<=1; int ans=0; for(int i=1;i*i<=r;++i) if(r%i==0) { ans+=cal(i); if(i!=r/i) ans+=cal(r/i); } cout<<(ans+1)*4<<endl; return 0; } ```
by RP_INT_MAX @ 2023-09-23 23:04:04


爆 ll 了。此贴结。
by RP_INT_MAX @ 2023-09-23 23:30:29


|