#include <cstdio>
#include <cmath>
bool is[1000010];
int gcd(int a,int b)
{
int r=1;
while(r){
r=a%b;
a=b;b=r;
}
return a;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF){
int ans1=0,ans2=0;
for(int i=1;i<=n;i++) is[i]=false;
int end=(int)sqrt((double)n);
for(int i=1;i<=end;i++)
for(int j=i+1;j<=end;j++){
int z=i*i+j*j;
if(z>n) break;
int x=2*i*j;
int y=j*j-i*i;
if(gcd(x,y)==1&&gcd(x,z)==1&&gcd(y,z)==1){
ans1++;
for(int k=1;k*z<=n;k++)
is[k*z]=is[k*x]=is[k*y]=true;
}
}
for(int i=1;i<=n;i++) if(!is[i])
ans2++;
printf("%d %d\n",ans1,ans2);
}
return 0;
}
UVA 106 (勾股数)
最新推荐文章于 2017-02-15 11:53:58 发布