计算三元组(a,b,c)的数量,以使C ++中a ^ 2 + b ^ 2 = c ^ 2和1 <= a <= b <= c <= n
我们得到一个整数n。目标是找到满足条件的三元组(3个数字一组)-
a2+b2=c2
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(intn)取n并返回满足以下条件的三元组的计数:a2+b2=c2且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