• ZJU Least Common Multiple


    #include<stdlib.h>
    #include<stdio.h>
    int *data;
    int main()
    {
    	void lcm(int n);
    	int m;
    	int n;
    	int i;
    
    	scanf("%d",&m);
    	while(m--)
    		{
    			scanf("%d",&n);
    			data=(int *)malloc(sizeof(int)*(n+1));
    			for(i=0;i<n;i++)
    			scanf("%d",&data[i]);
    
    			lcm(n);
    			free(data);
    		}
    }
    
    void lcm(int n)	 //求n个数的最小公倍数
    {
    	int gcd ( int  a,int b );
    	int i,j;
    	int tem;
    	int now=data[0];
    
    	for(i=1;i<n;i++)
    	{ 
    		tem=gcd(now,data[i]);
    		now=now/tem*data[i];
    	}
    	printf("%d
    ",now);
    
    } 
    
    int gcd ( int  a,int b )	 //求两个数的最大公约数  
    {
    	int temp;
    	if (a<b)
    	{
    		temp=a;
    		a=b;
    		b=temp;
    	}
    	if ( a % b == 0)
    	return b;
    	else
    	return gcd ( b,a % b) ;
    
    }


    链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1797

    求多个数的最小公倍数。现在我们对于两个数,他们的最小公倍数和最大公约数有如下关系:

    设两个数是a,b最大公约数是p,最小公倍数是q
    那么有这样的关系:ab=pq

    而最大公约数可以用辗转相除发求。

    解题思路是这样的:先求前两个数的最小公倍数q,再求q与第三个数的最小公倍数,覆盖掉原来的q值,,,,,依次下去.................


    #include<stdlib.h>
    #include<stdio.h>
    int *data;
    int main()
    {
    	void lcm(int n);
    	int m;
    	int n;
    	int i;
    
    	scanf("%d",&m);
    	while(m--)
    		{
    			scanf("%d",&n);
    			data=(int *)malloc(sizeof(int)*(n+1));
    			for(i=0;i<n;i++)
    			scanf("%d",&data[i]);
    
    			lcm(n);
    			free(data);
    		}
    }
    
    void lcm(int n)	 //求n个数的最小公倍数
    {
    	int gcd ( int  a,int b );
    	int i,j;
    	int tem;
    	int now=data[0];
    
    	for(i=1;i<n;i++)
    	{ 
    		tem=gcd(now,data[i]);
    		now=now/tem*data[i];
    	}
    	printf("%d
    ",now);
    
    } 
    
    int gcd ( int  a,int b )	 //求两个数的最大公约数  
    {
    	int temp;
    	if (a<b)
    	{
    		temp=a;
    		a=b;
    		b=temp;
    	}
    	if ( a % b == 0)
    	return b;
    	else
    	return gcd ( b,a % b) ;
    
    }


     


     

  • 相关阅读:
    最长递增子序列问题---动态规划
    Shell中判断语句if中-z至-d的意思
    Linux中shell变量$0,$?等含义
    LeetCode之链表
    linux命令之crontab定时执行任务
    linux命令之scp远程文件复制
    Linux命令之sed批量替换字符串操作
    tomcat安装出现问题及解决方法
    LeetCode之二叉树作题java
    mysql导入导出、阿里云内网传输
  • 原文地址:https://www.cnblogs.com/frankM/p/4399544.html
Copyright © 2020-2023  润新知