这是期末成绩啊求最大公约数和最小公倍数,菜单包括:最大公约数、最小公倍数.  ①先输入求m个数的最大公约数,如:求两个数的最大公约数,就输入2.再输入这m个数的数值,然后求最大公

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/02 16:31:40

这是期末成绩啊求最大公约数和最小公倍数,菜单包括:最大公约数、最小公倍数.  ①先输入求m个数的最大公约数,如:求两个数的最大公约数,就输入2.再输入这m个数的数值,然后求最大公
这是期末成绩啊
求最大公约数和最小公倍数,菜单包括:最大公约数、最小公倍数.
  ①先输入求m个数的最大公约数,如:求两个数的最大公约数,就输入2.再输入这m个数的数值,然后求最大公约数.
  ②先输入求m个数的最小公倍数,如:求两个数的最小公倍数,就输入2.再输入这m个数的数值,然后求最小公倍数.

这是期末成绩啊求最大公约数和最小公倍数,菜单包括:最大公约数、最小公倍数.  ①先输入求m个数的最大公约数,如:求两个数的最大公约数,就输入2.再输入这m个数的数值,然后求最大公
#include
#include
int Gcd(int *a,int n);
int Lcm(int *a,int n);
int main(void){
\x09int *a,*b,n,i,gcd,lcm;
\x09printf("to get the greatest common divisor: \nhow many numbers do you have ? ");
\x09scanf("%d/n",&n);
\x09a = (int*)malloc(n*sizeof(int));//分配空间给数组
\x09printf("please input the numbers: \n");
\x09for(i=0;i < n;++i){
\x09\x09scanf("%d",&a[i]);\x09\x09\x09\x09//输入数组元素
\x09}
\x09gcd = Gcd(a,n);
\x09printf("the greatest common divisor is %d \n\n",gcd);
\x09free(a);
\x09printf("to get the lowest common multiple : \nhow many numbers do you have ? ");
\x09scanf("%d/n",&n);
\x09b = (int*)malloc(n*sizeof(int)); //分配空间给数组
\x09printf("please input the numbers: \n");
\x09for(i=0;i < n;++i){
\x09\x09scanf("%d",&b[i]);
\x09}
\x09lcm = Lcm(b,n);
\x09printf("the lowest common multiple is %d \n\n",lcm);
\x09free(b);
\x09return 0;
}
int Gcd(int *a,int n){
\x09int gcd,min,i,cnt;
\x09gcd = 1;
\x09min = a[0];
\x09for(i = 1;i< n;++i){
\x09\x09if (min > a[i])
\x09\x09\x09min = a[i];
\x09}\x09\x09\x09\x09\x09//求最小值
\x09for(gcd = min ;gcd >= 1;gcd--){ //从大到小循环下来,求最大的公约数
\x09\x09cnt = 0;
\x09\x09for(i = 0; i < n;++i){
\x09\x09\x09if( (a[i] % gcd) == 0){
\x09\x09\x09\x09cnt = cnt +1;\x09\x09//cnt值用来记录能整除gcd的a[i]的个数
\x09\x09\x09}
\x09\x09
\x09\x09}
\x09\x09if (cnt == n)\x09\x09\x09\x09//如果cnt的个数等于n,说明gcd就是最大公约数了
\x09\x09\x09break;
\x09}
\x09return gcd;
}
int Lcm(int *a,int n){
\x09int lcm,max,i,cnt,product;
\x09max = a[0];
\x09product = 1;
\x09for(i = 1;i< n;++i){
\x09\x09if (max < a[i])
\x09\x09\x09max = a[i];
\x09}\x09\x09\x09\x09\x09\x09\x09\x09\x09\x09\x09//求最大值
\x09for(i = 0;i< n;i++){
\x09\x09\x09product = product * a[i];\x09\x09\x09
\x09\x09}\x09\x09\x09//求所有数的乘积,因为最小公倍数不会大于它
\x09for(lcm = max;lcm < product +1;++lcm){ //从数组中的最大值开始,从小自大循环
\x09\x09\x09cnt = 0;
\x09\x09for(i = 0;i< n;++i){
\x09\x09\x09if( (lcm % a[i] ) == 0){
\x09\x09\x09\x09cnt = cnt +1;\x09\x09\x09//原理与最大公约数相似
\x09\x09\x09}
\x09\x09}
\x09\x09if (cnt == n)
\x09\x09\x09break;
\x09\x09}\x09
\x09return lcm;
}
\x09\x09
妥不妥?望采纳!