C++求最小公倍数和最大公因数
最近自学了个vector感觉比纯穷举法求最小公倍数效率高。用得初中算最小公倍数的算法,顺便练练vector容器
#include<string>
#include<iostream>
#include<vector>
#include<math.h>
using namespace std;
int main()
{
//求因子
vector<int>v1;//定义两个容器存放两个数的因子
vector<int>v2;
double a, b;
double c,d,e,f;
scanf_s("%lf%lf", &a, &b, 2);//cin>>a>>b;
int temp = 0;
if (a > b)
{
temp = a;
a = b;
b = temp;
};//a小,b大
for (int i = 1; i <= a; i++)
{
c = a / i;
d = floor(c);
if (c == d)
{
v1.push_back(i);//把可以整除的除数存入容器
}
else
continue;
};
cout << a<<"的因数:";
for (auto i : v1)
{
cout << i << " ";//检索v1,打印v1中所有元素
};
cout << endl;
//同理求b的因子
cout << b<<"的因数:";
for (int i = 1; i <= b; i++)
{
f = b / i;
e = floor(f);
if (f == e)
{
v2.push_back(i);
}
else
continue;
};
for (auto i : v2)
{
cout << i << " ";
};
cout << endl;
//对比两容器存放因子的值,将相同值存入容器v3,最后返回v3中最大的值,即最大公因数
int v1_n=0;
int v2_n=0;
vector<int>v3;
v1_n = v1.size();
v2_n = v2.size();
for (auto i:v1)
{
for (auto k : v2)
{
if (i == k)
{
v3.push_back(i);
};
}
}
cout << endl;
cout << "最大公因数为: " << v3.back() << endl;
如何求最小公倍数呢?
将a,b中大数赋给a;b的容器里的每一个值去乘a,如果得出来的值能被b整除
将这些值存储到容器v4中,最后输出v4中第一个值,或者不用容器直接输出第一个得到的结果
vector<int>v4;
int nv1 = 0;
nv1 = v1.size(); //v1的元素个数
double t1, t2;//初始化过程变量
int v4_t=0; //初始化公倍数变量
for (int i2 = 0;i2<nv1;++i2)
{
t1 = (b * v1[i2]) / a;
t2 = floor(t1);
if (t1 == t2)//判断整除
{
v4_t= b * v1[i2];
v4.push_back(v4_t);
}
}
//牢记vector的下标从零开始!
cout << "最小公倍数为:" << v4[0] << endl;
system("pause");
return 0;
}
运行结果
第一个帖子,将就看看吧,大学僧毕竟水平有限。。。