杭电OJ 2028题笔记

题目链接:http://acm.hdu.edu.cn/shoproblem.php?pid=2028

题目

这种题最直接的方法就是

穷举法

#include<stdio.h>

void main()

{

    int n,min,i,m,a[100];

    while(scanf("%d",&n)!=EOF)

    {

        for(i=0;i<n;i++)

        {

            scanf("%d",&a[i]);

        }

        min=a[0];//可以减去一次循环

        for(i=1;i<n;i++)

        {

            for(m=min;;m++)

            {

            if(m%a[i]==0&&m%min==0)break;//判断为最小公倍数的条件

            }

            min=m;//每次循环的最小公倍数

        }

        printf("%d\n",m);

    }

}

若求最大公约数则

#include<stdio.h>

void main()

{

    int n,min,i,m,a[100];

    while(scanf("%d",&n)!=EOF)

    {

        for(i=0;i<n;i++)

        {

            scanf("%d",&a[i]);

        }

        min=a[0];//可以减去一次循环

        for(i=1;i<n;i++)

        {

            for(m=min;;m--)

            {

            if(a[i]%m==0&&min%m==0)break;//判断为最大公约数的条件

            }

            min=m;//每次循环的最大公约数

        }

        printf("%d\n",m);

    }

}


第二种辗转相除法(用于求两数的最大公约数和最小公倍数)

方法如下

int s(int a,int b)//辗转相除法

{

    int f,t;

    int p = a,k = b;

    if(a<b)

    {

        t=a;

        a=b;

        b=t;

    }

    while(b!=0)

    {

        f=a%b;

        a=b;

        b=f;

    }

   // printf("%d",a);//a为所得最大公约数

    return p/a*k;//最小公倍数=两数之积/最大公约数

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容