题意:你站在原点,每个坐标位置有一棵高度相同的树,问能看到多少棵树
ans=Σ gcd(x,y)=1
欧拉函数搞搞
#include#include using namespace std;int phi[2001],p[2001],sum[2001],cnt;bool v[2001];int main(){ phi[1]=1; for(int i=2;i<=2000;i++) { if(!v[i]) { p[++cnt]=i; phi[i]=i-1; } for(int j=1;j<=cnt;j++) { if(i*p[j]>2000) continue; v[i*p[j]]=true; if(i%p[j]) phi[i*p[j]]=phi[i]*(p[j]-1); else { phi[i*p[j]]=phi[i]*p[j]; break; } } } int a,b; long long ans; while(scanf("%d%d",&a,&b)!=EOF) { if(!a) return 0; ans=0; ans+=b+1; for(int i=2;i<=a;i++) { ans+=1ll*b/i*phi[i]; for(int j=b/i*i+1;j<=b;j++) ans+=__gcd(i,j)==1; } ans<<=2; printf("%.7lf\n",1.0*ans/(1ll*a*b*4+2*(a+b))); }}