碾转相除求最小公因数
非递归写法
函数必须用括号括起来!!!!!!!!
#include<bits/stdc++.h>
using namespace std;
int m,n;
int gcd(int m,int n)
{
int temp;
while(n!=0)
{
temp=m%n;
m=n;
n=temp;
}
return m;
}
int main()
{
cin>>m>>n;
if(m>n)
cout<<gcd(m,n);
else
cout<<gcd(n,m);
return 0;
}
递归写法
#include<bits/stdc++.h>
using namespace std;
int m,n;
int gcd(int m,int n)
{
return (!n)?m:gcd(n,m%n);
}
int main()
{
cin>>m>>n;
if(m>n)
cout<<gcd(m,n);
else
cout<<gcd(n,m);
return 0;
}
最小公倍数=两数相乘 / 最大公约数
#include<bits/stdc++.h>
using namespace std;
int m,n;
int gcd(int m,int n)
{
return (!n)?m:gcd(n,m%n);
}
int lcm(int m,int n)
{
return m/gcd(m,n)*n; //防止超限
}
int main()
{
cin>>m>>n;
int t;
if(m>n)
{
m=n;
n=t;
t=m;
}
cout<<gcd(m,n)<<endl; // 最大公约数
cout<<lcm(m,n)<<endl; //最小公倍数
return 0;
}