计算 GCD 等于 C++ 中给定数的自然数对
我们给出了三个输入变量,分别是“start”、“end”和“number”。目标是在开始和结束之间找到 GCD 值等于“数字”的数字对。例如GCD(A,B)=number 并且 A、B 都在 [start,end] 范围内。
让我们通过例子来理解。
输入- 开始=5 结束=20 数字=8
输出- GCD 等于给定数的自然数对的计数为 - 3
解释- 5 到 20 之间的对使得 GCD 为 8 是 - (8,8), (8,16), (16,8)
输入- 开始=5 结束=20 数字=7
输出- GCD 等于给定数的自然数对的计数为 - 2
解释- 20 到 30 之间的对使得 GCD 为 7 是 - (21,28), (28,21)
下面程序中使用的方法如下
我们将使用两种方法。第一个简单的方法,我们将使用从 i=start 到 i<=end 的 for 循环和从 j=start 到 j<=end 的内部循环遍历。对于每个pair(i,j)检查 if GCD(i,j)==number。如果为真增量计数。
将变量 start、end 和 number 作为整数。
函数GCD(int a, int b)是递归的,并返回传递给它的参数 a,b 的 GCD。
如果 b 非零,它会以 GCD(b,a%b) 的形式递归调用自己,否则返回 a。
函数GCD_pairs(int start, int end, int number)采用边界变量 start、end 和变量 number,并返回 start 和 end 之间具有 gcd=number 的对。
取初始计数为 0。
对每个成员使用两个 for 循环。从 i=start 到 i<=end 的外循环和从 j=start 到 j<=end 的内循环。
检查是否为对 (i,j), GCD(i,j)==number。如果为真,则增加计数。
最后我们将得到 gcd=number 的对的总数。
返回计数作为结果。
有效的方法
在这种方法中,我们将更新 start 和 end 的值。对于pair(i,j)gcd=number,i,j 都应该被 'number 整除。至多 (end-start)/numberno.s将完全除以“number”。为了得到可以被'number'整除的start和end之间的数字,我们将从start = (start + number - 1) / number到end = end / number遍历;因此,对于每个这样的数字,如果gcd(i,j)==1,则为这样的对(i,j)增加计数。
将变量 start、end 和 number 作为整数。
更新开始 = (start+number - 1)/number。并且结束=结束/数字。
函数GCD(int a, int b)是递归的,并返回传递给它的参数 a,b 的 GCD。
如果 b 非零,它会以 GCD(b,a%b) 的形式递归调用自己,否则返回 a。
函数GCD_pairs(int start, int end, int number)采用边界变量 start、end 和变量 number,并返回 start 和 end 之间具有 gcd=number 的对。
取初始计数为 0。
对每个成员使用两个 for 循环。从 i=start 到 i<=end 的外循环和从 j=start 到 j<=end 的内循环。
检查是否对 (i,j), GCD(i,j)==1。如果为真,则增加计数。
最后我们将得到 gcd=number 的对的总数。
返回计数作为结果。
示例(幼稚的方法)
#include <bits/stdc++.h>输出结果using namespace std;
int GCD(int a, int b){
return b ? GCD(b, a % b) : a; }
int GCD_pairs(int start, int end, int number){
int count = 0;
for (int i = start; i <= end; i++){
for (int j = start; j <= end; j++){
if (GCD(i, j) == number){
count++;
}
}
}
return count;
}
int main(){
int start = 10, end = 30, number = 10;
cout<<"GCD等于给定数的自然数对的计数是: "<<GCD_pairs(start, end, number) << endl;
return 0;
}
如果我们运行上面的代码,它将生成以下输出 -
GCD等于给定数的自然数对的计数是: 7
示例(有效方法)
#include <bits/stdc++.h>输出结果using namespace std;
int GCD(int a, int b){
return b ? GCD(b, a % b) : a;
}
int GCD_pairs(int start, int end, int number){
int count = 0;
for (int i = start; i <= end; i++){
for (int j = start; j <= end; j++){
if (GCD(i, j) == 1){
count++;
}
}
}
return count;
}
int main(){
int start = 10, end = 30, number = 10;
start = (start + number - 1) / number;
end = end / number;
cout<<"GCD等于给定数的自然数对的计数是: "<<GCD_pairs(start, end, number) << endl;
return 0;
}
如果我们运行上面的代码,它将生成以下输出 -
GCD等于给定数的自然数对的计数是: 7
以上是 计算 GCD 等于 C++ 中给定数的自然数对 的全部内容, 来源链接: utcz.com/z/327631.html