#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(费马定理&毕达哥拉斯定理)
最新推荐文章于 2025-12-07 19:06:04 发布
本文介绍了一个使用C++实现的程序,该程序能够找出指定范围内所有无法表示为三个正整数平方和的数,并同时统计能表示为这种形式的数的数量。通过使用欧几里得算法计算最大公约数来确保互质条件,进而生成勾股数。

1774

被折叠的 条评论
为什么被折叠?



