UVA 10214

来源:互联网 发布:java 获取classpath 编辑:程序博客网 时间:2024/06/02 04:04

【题目分析】
更相减损术+暴力。


【代码】

#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define ll long longint phi[2010],gcd[2010][2010];inline int fgcd(int a,int b){return b==0?a:fgcd(b,a%b);}int main(){    int i,j,k,p,q,a,b;    ll x,y,z,ans;    phi[1]=1;    for (i=2;i<=2000;i++)      if (!phi[i])        for (j=i;j<=2000;j+=i)        {            if (!phi[j]) phi[j]=j;            phi[j]=phi[j]/i*(i-1);        }    for (i=1;i<=2000;i++)      for (j=1;j<=2000;j++)        gcd[i][j]=fgcd(i,j);    while (scanf("%d%d",&a,&b)&&a)    {        ans=0;        for (i=1;i<=a;i++)        {            ans+=(ll)phi[i]*(b/i);            for (j=1;j<=b%i;j++)              if (gcd[i][j]==1)                ans++;        }        printf("%.7f\n",((double)ans*4+4)/((2*(double)a+1)*(2*b+1)-1));    }}
0 0