24 = 2^3 * 3,288 = 2^3 * 36,m = 3 * 3 * 2 = 18, 运算结果没问题,不知道你为什么要这么算
unsigned int g(unsigned int a ,unsigned int b)
{
unsigned int k=1;//k记录公约数
if(!(a&&b))return 0;//判断是否有参数为0,如保证参数是正整数,可省略
if(a==b)return a;// 首先判断a b是否相等,如果相等就可直接返回结果,此处省略,结果正确,但都为偶数时,会增加没必要的约2步骤
while(!(a&1 | b&1))//是偶数约2
{
a/=2;
b/=2;
k*=2;
}
if(a==1 || b==1)return k;//约2后,判断是否除尽
while(1)
{
if(a==b)//相等就出结果,相等判断在相减之前必须有一次,否则当两数相等时会出问题
{
k*=a;
break ;
}
else if( a>b )a-=b;//不等大减小
else b-=a;//不等大减小
}
return k;
}