题目:1.如果两个数很大,怎样求最大公约数,最小公倍数?
2.如果是n个数呢?比如1000个数的最小公倍数
1.利用辗转相除法(欧几里得算法)gcd(a,b) = gcd(b,a%b); 最小公倍数 = 两数相乘 / 最大公约数。
#include<stdio.h>
int gcd(int a,int b)
{
if(b == 0)return a;
return gcd(b,a%b);
} //无论a,b大小关系如何,都可用这种方法解
int main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("最大公约数为:%d\n",gcd(a,b));
printf("最小公倍数为:%d\n",a*b/gcd(a,b));
return 0;
}
2.
#include<stdio.h>
int a[100] ;
int gcd(int a,int b)
{
if(b == 0)return a;
return gcd(b,a%b);
} //无论a,b大小关系如何,都可用这种方法解
int lcm(int a,int b)
{
return a*b/gcd(a,b);
} //求最小公倍数
int main()
{
int n;
scanf("%d",&n);
for(int i = 0 ; i < n ; i++)
{
scanf("%d",&a[i]);
}
int f = a[0];
for(int i = 1 ; i < n ; i++)
{
f = lcm(f,a[i]);
}
printf("%d\n",f);
return 0;
}