#include<iostream>
#include<cstdio>
#include<string>
#include<map>
#include<algorithm>
#include<vector>
#include<queue>
#include<set>
#include<cstring>
#include<stack>
#include<cmath>
using namespace std;
int arr[1000010];
int main()
{
int N;
while(scanf("%d",&N)!=EOF)
{
int count1=0,count2=0;
memset(arr,0,sizeof(arr));
int i,j,m,n;
int max_m=(int)sqrt((float)N-1);
for(m=2;m<=max_m;m++)
{
int max_n=(int)sqrt((float)N-m*m);
if(max_n>m)
max_n=m-1;
for(n=1;n<=max_n;n++)
{
if(m%2!=n%2)
{
int r;
int a=m,b=n;
r=a%b;
while(r)
{
a=b;
b=r;
r=a%b;
}
if(b==1)
{
int x=m*m-n*n;
int y=2*m*n;
int z=m*m+n*n;
for(int k=0;z*k<=N;k++)
{
arr[k*x]=arr[k*y]=arr[k*z]=1;
}
count1++;
}
}
}
}
for(i=1;i<=N;i++)
{
if(arr[i]==0)
count2++;
}
printf("%d %d\n",count1,count2);
}
return 0;
}
Uva 106 Fermat vs. Pythagoras
最新推荐文章于 2019-03-02 15:18:42 发布