POJ 1305 勾股数组

来源:互联网 发布:浙大gpa算法 编辑:程序博客网 时间:2024/04/30 19:01

数论上的一个定理

#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);}}