C 最大公约数和最小公倍数main(){int i,m,n,c,w;scanf("%d%d",&m,&n);for(i=m;i>=2;i--){if(m%2==0 && m%i==0){c=i;break;}}for(i=m;i
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/15 15:02:52
C 最大公约数和最小公倍数main(){int i,m,n,c,w;scanf("%d%d",&m,&n);for(i=m;i>=2;i--){if(m%2==0 && m%i==0){c=i;break;}}for(i=m;i
C 最大公约数和最小公倍数
main()
{
int i,m,n,c,w;
scanf("%d%d",&m,&n);
for(i=m;i>=2;i--)
{if(m%2==0 && m%i==0){c=i;break;}}
for(i=m;i
C 最大公约数和最小公倍数main(){int i,m,n,c,w;scanf("%d%d",&m,&n);for(i=m;i>=2;i--){if(m%2==0 && m%i==0){c=i;break;}}for(i=m;i
if(m%2==0 && m%i==0){c=i;break;}}
改成
if(n%2==0 && m%i==0){c=i;break;}}
我有更好的办法:
两个方法:
假设这两个数是a,b a>=b;
1
让变量i从b开始递减,for(i-b;i>2;i--)
判断能否被b整除
这个方法速度慢
2
设m为a,b的最大公约数,那么 a%m==0 b%m==0
令a = w*m; b= e*m; w,e都为整数
(a%b) == a - k*b; k肯定是一个整数;
=> a%b = w*m - k*b = w*m-k*e*m = (w-k*e)*m;
因为 w,e,k都是整数,并且a%b>=0;
=> (a%b) %m ==0;
所以求a,b的公约数就是求a%b,b的公约数
该方法速度很快.
int gcd(int a,int b) // a>=b
{
int t = a% b;
while( t > 0 )
{
a= b;
b= t;
t = a%b;
}
return b;
}