最大公约数:采用辗转相除法。(递归和非递归两种方法实现)
最小公倍数:两数相乘/最大公约数
详见代码。
#include <iostream>
#include <cstdio>
using namespace std;
int gcd1(int a,int b)// 递归算法
{
if (b==0)
return a;
return gcd1(b,a%b);
}
int gcd2(int a,int b) //非递归算法(辗转相除法)
{
if (a<b)
swap(a,b);
while (b!=0)
{
int cmp=a%b;
a=b;
b=cmp;
}
return a;
}
int main()
{
int n,m,ans1,ans2;
while (~scanf ("%d%d",&n,&m))
{
ans1=gcd1(n,m);
ans2=gcd2(n,m);
printf ("%d %d\n",ans1,ans2);
}
return 0;
}
最小公倍数的算法实现。
int lcm(int a,int b)
{
return a*b/gcd(a,b);
}
分解质因子的算法实现。
int num[80000];
void f(int n) //分解质因子
{
int k=0,t=n;
for(int i=2;i*i<=t;i++)
{
while(n%i==0)
{
num[k++]=i;
n/=i;
}
}
}