数论上的一个定理
#include<cstdio>
#include<cstring>
using namespace std;
bool vis[1000010];
int gcd(int a,int b){
return b==0?a:gcd(b,a%b);
}
int main(){
int n,i,j,k;
while(scanf("%d",&n)==1){
memset(vis,0,sizeof(vis));
int sum=0;
for(i=1;i<=n;i+=2)
for(j=i+2;j<=n;j+=2){
if(gcd(i,j)>1)continue;
int a=i*j;
int b=(j*j-i*i)/2;
int c=(j*j+i*i)/2;
if(c>n)break;
sum++;
for(k=1;k<=n/c;k++)
vis[a*k]=vis[b*k]=vis[c*k]=1;
}
int ans=0;
for(i=1;i<=n;i++)
if(vis[i]==0)
ans++;
printf("%d %d\n",sum,ans);
}
}