辗转相除法求
int divisor (int a,int b)
{
int temp;
if(a<b)
{
temp=a;
a=b;
b=temp;
}
while(b!=0)
{
temp=a%b;
a=b;
b=temp;
}
return (a);
}
int multiple (int a,int b)
{
int divisor (int a,int b);
int temp;
temp=divisor(a,b);
return (a*b/temp);
}
#include "stdio.h"
Int main()
{
int m,n,t1,t2;
printf("please input two integer number:");
scanf("%d%d",&m,&n);
t1=divisor(m,n);
t2=multiple(m,n);
printf("The higestcommon divisor is %d\n",t1);
printf("The lowest common multiple is %d\n", t2);
}
递归法求公约数,公倍数
#include <stdio.h>
intGCD(inta, intb)
{
returnb?GCD(b, a%b): a;
}
intmain()
{
inta,b,c;
scanf("%d%d",&a,&b);
c=GCD(a,b);
printf("%d %d",c,a*b/c);
return0;
}
2
、穷举法(利用数学定义)
穷举法(也叫枚举法)穷举法求两个正整数的最大公约数的解题步骤:从两个数中较小数开始由大到小列举,直到找到公约数立即中断列举,得到的公约数便是最大公约数。
① 、定义
1:对两个正整数a,b如果能在区间[a,0]或[b,0]内能找到一个整数temp能同时被a和btemp即为最大公约数。
代码为:
int divisor (int a,int b)
{
int temp;
temp=(a>b)?b:a;
while(temp>0)
{
if (a%temp==0&&b%temp==0)
break;
temp--;
}
return (temp);
}
#include "stdio.h"
main()
{
int m,n,t1;
printf("please input two integer number:");
scanf("%d%d",&m,&n);
t1=divisor(m,n);
printf("The higest common divisor is %d\n",t1);
getch();
}
② 、定义
2:对两个正整数a,b,如果若干个a之和或b之和能被b所整除或能被a所整除,则该和数即为所求的最小公倍数。 代码为:
int multiple (int a,int b)
{
int p,q,temp;
p=(a>b)?a:b;
q=(a>b)?b:a;
temp=p;
while(1)
{
if(p%q==0)
break;
p+=temp;
}
return (p);
}
#include "stdio.h"
main()
{
int m,n,t2;
printf("please input two integer number:");
scanf("%d%d",&m,&n);
t2=multiple(m,n);
printf("The least common multiple is %d\n",t2);
getch();
}
最小公倍数为两数的乘积除以最大公约数