最小公倍数和最大公约数
两数求最大公约数
辗转相除法求最大公约数,使a>b,a,b不断取余数直到a,b相等
int gcd(int a, int b)
{
if(a < b) a = a^b, b = b^a, a = a^b;
int c = a%b;
while(a%b != 0){
a = b, b = c, c = a % b;
}
return b;
}
两数求最小公倍数
a*b/gcd(a,b)
多个数求最大公约数
但注意一定要大于两个数才可以,从第二个数开始,依次和第一个数取gcd(没错就是这么简单)
int gcd(int a, int b)
{
if(a < b) a = a^b, b = b^a, a = a^b;
int c = a%b;
while(a%b != 0){
a = b, b = c, c = a % b;
}
return b;
}
int main()
{
int num[20], n;
scanf("%d",&n);
for(int i = 1; i <= n; i++)
scanf("%d",&num[i]);
int ans = num[1];
for(int i = 2; i <= n; i++)
ans = gcd(ans, num[i]);
printf("%d",ans);
return 0;
多个数最小公倍数
也很简单,从第二个数开始依次和第一个数取lcm;
int gcd(int a, int b)
{
if(a < b) a = a^b, b = b^a, a = a^b;
int c = a%b;
while(a%b != 0){
a = b, b = c, c = a % b;
}
return b;
}
int main()
{
int num[20], n;
scanf("%d",&n);
for(int i = 1; i <= n; i++)
scanf("%d",&num[i]);
int ans = num[1];
for(int i = 2; i <= n; i++)
ans = ans*num[i]/gcd(ans, num[i]);
printf("%d",ans);
return 0;
}