题目:http://acm.fzu.edu.cn/problem.php?pid=1669
题意:求满足以a,b为直角边,c为斜边,且满足a+b+c<=L的直角三角形的个数。
分析:http://blog.csdn.net/w20810/article/details/43564495
枚举m,n求出本原本原毕达哥拉斯三元组(a,b,c),然后将三元组(a,b,c)乘以i(保证i*(a+b+c<=L))
代码:
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int gcd(int a,int b)
{
return b==0?a:gcd(b,a%b);
}
int solve(int L)
{
int n,m,i;
int a,b,c;
int ans=0;
int p=sqrt(1.0*L);
for(n=1;n<=p;n++)
for(m=n+1;2*(m*m+m*n)<=L;m+=2)
if(gcd(m,n)==1)
{
a=m*m+n*n;
b=2*m*n;
c=m*m-n*n;
for(int i=1;i*(a+b+c)<=L;i++)
ans++;
}
return ans;
}
int main()
{
int m,n,i,L,p;
int a,b,c;
int ans;
while(scanf("%d",&L)!=EOF)
{
ans=solve(L);
printf("%d\n",ans);
}
return 0;
}