用 C++ 统计满足 a^2 + b^2 = c^2 且 1<=a<=b<=c<= n 的三元组 (a, b, c) 的数量


给定一个整数 n,目标是找到满足以下条件的三元组(3 个数字的集合):−

  • a2+b2=c2

  • 1<=a<=b<=c<=n

我们将通过运行两个循环来实现这一点,循环变量分别为 1<=a<=n 和 1<=b<=n。相应地计算 c (c=sqrt(a2+b2)),如果满足条件 1 和 2,则递增计数器。

让我们通过示例来理解。

输入 − N=5

输出 − 三元组数量 − 1

解释

for a=3, b=4 and c=5 both conditions are met.

输入 − N=3

输出 − 三元组数量 − 0

解释

没有满足条件 1 和 2 的三元组。

下面程序中使用的算法如下:

  • 整数 N 存储范围 [1,N] 的上限。

  • 函数 countTriplets(int n) 接收 n 并返回满足条件 a2+b2=c2 且 1<=a<=b<=c<=n 的三元组的数量。

  • 变量 count 存储此类三元组的数量,初始值为 0。

  • 变量 sum 存储 a 和 b 的平方和。

  • 从 a=1 到 n,b=a 到 n,计算 sum=a*a+b*b 和 c 为 sum 的平方根 (sqrt(sum))。

  • 如果计算出的 c 的值满足 c*c==sum 且 b<=c && c<=n(满足条件 1 和 2)。

  • 将 count 递增,因为当前的 a、b、c 满足这两个条件。

  • 执行此操作直到 a=n 和 b=n。最后,count 将包含满足条件的三元组的数量。

  • 返回 count 作为结果。

示例

 在线演示

#include <bits/stdc++.h>
using namespace std;
int countTriplets(int n){
   int count = 0;
   int a,b,c;
   a=b=c=1;
   int sum=0;
   for (a = 1; a <= n; a++) //1<=a<=n{
      for (b = a; b <= n; b++) //1<=a<=b<=n{
         sum = a*a + b*b; //a^2 + b^2 =c^2
         c = sqrt(sum);
         if (c * c == sum && b<=c && c<=n) //check 1<=a<=b<=c<=n{
            count++;
            cout<<endl<<"a :"<<a<<" b :"<<b<<" c :"<<c; //to print triplets
         }
      }
   }
   return count;
}
int main(){
   int N = 15;
   cout <<endl<< "Number of triplets : "<<countTriplets(N);
   return 0;
}

输出

如果我们运行上面的代码,它将生成以下输出:

Number of triplets :
a :3 b :4 c :5
a :5 b :12 c :13
a :6 b :8 c :10
a :9 b :12 c :154
Number of triplets : 4

更新于:2020-08-29

450 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告