计算三元组(a,b,c)的数量,以使C ++中a ^ 2 + b ^ 2 = c ^ 2和1 <= a <= b <= c <= n

我们得到一个整数n。目标是找到满足条件的三元组(3个数字一组)-

  • a 2 + b 2 = c 2

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

我们将通过为1 <= a <= n和1 <= b <= n的值运行两个循环来做到这一点。如果同时满足条件1和2,则计算c(c = sqrt(a2 + b2))并递增计数。

让我们通过示例来理解。

输入-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并返回满足以下条件的三元组的计数:a 2 + b 2 = c 2且1 <= a <= b <= c <= n

  • 可变计数存储此类三元组的数量,最初为0。

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

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

  • 如果计算出的c具有这样的值,即c * c == sum和b <= c && c <= n(同时满足条件1和2)。

  • 当电流a,b,c满足两个条件时,增量计数。

  • 执行此操作直到a = n和b = n。最后,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
猜你喜欢