使用数组的 2 个数字的最大公约数
the biggest common divisor of 2 numbers using arrays
如何使用数组找到 2 个数字的最大公约数?我尝试使用 2 个数组解决它,但我无法完成它。我怎样才能改进这个计划?
#include <iostream>
using namespace std;
int main()
{
unsigned int A[2][10], B[2][10], a, b, c_exp, d, i1, P, x;
bool apartine = false;
cout << "a="; cin >> a;
cout << "b="; cin >> b;
P = 1;
c_exp = 0;
i1 = 0;
while (a % 2 == 0)
{
c_exp++;
a = a/2;
}
if (c_exp != 0)
{
A[i1][0] = 2;
A[i1][1] = c_exp;
i1++;
}
d = 3;
while (a != 1 && d <= a)
{
c_exp=0;
while (a % d == 0)
{
c_exp++;
a = a/d;
}
if (c_exp!=0)
{
A[i1][0] = d;
A[i1][1] = c_exp;
i1++;
}
d = d+2;
}
cout << "nMatricea A contine:";
for (int i = 0; i < i1; i++)
{
cout << "n";
for (int j = 0; j < 2; j++)
cout << A[i][j] << ",";
}
c_exp = 0;
i1 = 0;
while (b % 2 == 0)
{
c_exp++;
b = b/2;
}
if (c_exp != 0)
{
B[i1][0] = 2;
B[i1][1] = c_exp;
i1++;
}
d = 3;
while (b != 1 && d <= b)
{
c_exp = 0;
while (b % d == 0)
{
c_exp++;
b = b/d;
}
if (c_exp != 0)
{
B[i1][0] = d;
B[i1][1] = c_exp;
i1++;
}
d = d+2;
}
cout << "nMatricea B contine:";
for (int i = 0; i < i1; i++)
{
cout << "n";
for (int j = 0; j < 2; j++)
cout << B[i][j] << ",";
}
return 0;
}
从现在开始,我必须找出第一个数组的第一个数字是否存在于第二个数组中,在此之后,我必须比较两个数组的相同数量的指数和我必须将其添加到产品的最低数量的指数。在此之后,我必须将第二个数字重复相同的过程到第一个数组的最后一个数字。问题是我不知道怎么写这个。我不得不提到这个程序并不完整。
有什么想法吗?
如果您需要更好的解决方案,则可以避免数组并使用以下逻辑。
int main()
{
int a =12 ,b = 20;
int min = a>b ? a:b; // finding minimum
if(min > 1)
{
for (int i=min/2; i>1; i--)//Reverse loop from min/2 to 1
{
if(a%i==0 && b%i==0)
{
cout<<i;
break;
}
}
}
else if(min == 1)
{
cout<<"GCD is 1";
}
else
cout<<"NO GCD";
return 0;
}
您还可以检查工作示例最大公约数
我不太确定您要用代码实现什么。它看起来很复杂。如果我找到两个数字的最大公约数,我会做如下事情:
## This is not a correct implementation in C++ (but close to it) ##
Read the two integers **a** and **b**
int max_div(int a, int b){
int div = a > b ? a : b;
while (div != 1 && (a%div != 0 && b%div != 0)){
div--;
}
return div;
}
此函数从 a 和 b 的最小值作为可能的最高公约数开始,然后向后工作,直到以下两种可能的结果之一:
- 它找到一个公约数(a%div == 0 和 b%div == 0)
- 它达到一个(总是一个公约数)
编辑:现在,如果没有找到更高的除数,则返回一个。(返回零,这毫无意义)
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 查找最接近的大于当前数字的数字的索引
- 找到两对数字,使它们的乘积的绝对差最小化
- 遍历并行数组以确定C++中的最大数字
- 如何找到大于整数的最小数字
- 程序以使用 C++ 中的 while 循环查找一组数字的最小值
- 如何修复我的最大公约数代码?它适用于除零和零以外的所有数字
- 获取数字最左边两个位的值的最便宜的方法是什么?
- 最大化双分区的 GCD(最大公约数)之和?
- 最大公因数函数
- 多项式最大公约数C++
- 实现欧几里得除法,根据两个正整数的线性组合编写这两个正整数的最大公约数
- 使用数组的 2 个数字的最大公约数
- 在编译时找到最大公约数
- C++最大公约数循环
- 直到n的所有数的最大公约数与n的和
- 查找数组中与另一个给定数字最接近的数字
- c++程序计算最大公约数
- 使用欧几里得算法识别两个值的最大公约数 (GCD)
- 找出最大公约数的程序