关于算法的提问~应该很简单~请帮下忙

来源:百度知道 编辑:UC知道 时间:2024/05/29 01:54:00
这个代码怎么就可以求最大公 约数 想不通
int gcd(int v1,int v2)
{
while(v2)
{
int temp=v2;
v2=v1%v2;
v1=temp;
}
}

while(v2) 括号里光一个v2是什么意思, while()里不是应该写条件吗?光一个v2是什么条件?

可以这么理解吗,只要v2!=0,因为当v2等于0时,判断条件为假,就不执行后面的操作,当v2!=
0时v2等于任何数都为真,都执行后面的操作
可是后面的代码怎么就能使它求最大公约数的?
能讲解下它的算法思路吗?
另外求本教C++算法的书籍,谢谢

while(v2)的条件就是v2非0
假设有两个数 a,b(a>b)
则a与b的最大公约数也是a与a-b的最大公约数a和a-b成为新的a,b
因此当a-b=0时,即此时的a就是原来的a与b的最大公约数
程序中引入temp的目的是保证a>b