本帖最后由 guosl 于 2022-9-18 08:38 编辑
应用本原直角三角形的性质来做。
所谓本原直角三角形指三边长度皆为整数,且两两互素的直角三角形。显然任意一个整数边长的直角三角形都是某个本原直角三角形放大得来,所以我们只要考虑计算本原直角三角形的情况,然后放大就行了。
而本原直角三角形的三条边长有计算公式:
a=m^2-n^2,b=2mn(二条直角边)
c=m^2+n^2(斜边)
其中m、n皆为正整数。同时m、n满足(1)m>n;(2)m、n互素;(3)m、n奇偶性相异。
答案:10057761#include <iostream>
using namespace std;
int gcd(int x, int y)
{
if (y == 0)
return x;
return gcd(y, x%y);
}
int main(void)
{
int nCount = 0;
for (long long m = 2; m <= 10000; ++m) //枚举m
{
for (long long n = 1; n < m; ++n) //枚举n
{
long long l = m + n;
l *= 2 * m; //计算周长
if (l >= 100000000ll)
break;
if (((m + n) & 1) == 0) //判断m,n的奇偶性
continue;
if (gcd(m, n) > 1) //判断m,n是否互质
continue;
long long c = m * m + n * n;//计算大正方形的边长
long long d = 2 * m*n - m * m + n * n;//计算小正方形的边长
if (d < 0)
d = -d;
if (c%d == 0) //判断是否整除
{
long long l1 = l;
while (l1 < 100000000ll) //计算放大的情况
{
++nCount;//计数
l1 += l;//放大
}
}
}
}
cout << nCount << endl;
return 0;
}
|