#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#define M 1000010
using namespace std;
int gcd(int a,int b)
{
if(b==0)return a;
return gcd(b,a%b);
}
bool flag[M];
int main()
{
int N,x,y,z;
while(scanf("%d",&N)==1)
{
memset(flag,false,sizeof(flag));
int count1=0,count2=0;
for(int m=1; m<=(int)sqrt(N); m++)
for(int n=m+1; n<=(int)sqrt(N);n+=2)
{
if(gcd(m,n)==1)
{
x=n*n-m*m;
y=2*m*n;
z=n*n+m*m;
if(z>N)break;
count1++;
for(int i=1; z*i<=N; i++)
{
flag[i*x]=true;flag[i*y]=true;flag[i*z]=true;
}
}
}
for(int i=1; i<=N; i++)
if(!flag[i])
count2++;
printf("%d %d\n",count1,count2);
}
return 0;
}
UVA 106(费马定理&毕达哥拉斯定理)
最新推荐文章于 2016-11-25 10:12:00 发布