c++的算法问题

来源:百度知道 编辑:UC知道 时间:2024/09/26 00:27:45
在辗转相除法为什么2个想除取余,知道余数书0,就能取除最大公约数??
据个例子???请自己写个例子不要在百科里抄?

比如:8与12
12除8余4
8除4等于0
所以公约数为4;
下面我给你举一个我自己编的例子:
#include "stdio.h"
int f1(int m,int n)
{
int p;
while(m%n!=0)
{
p=m%n;
m=n;
n=p;
}
return(n);
}
int f2(int m,int n)
{
int p;
p=m*n/f1(m,n);
return(p);
}
void main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("最大公约数为%d\n",f1(a,b));
printf("最小公倍数为%d\n",f2(a,b));
}

比方说15 和 9 ,先用15/9余6,再用9/6余3,然后用6/3余0
所以3为最大公约数
C++的算法的话 可以用递归,但是下面函数中a要比b大
int al(int a,int b){
if(a%b==0) return b;
elseif(a%b==1) return -1;//无解
else
al(b,a%b);
}

int f(int v1,int v2)
{
if(v2!=0)
return f(v2,v1%v2);
return v1;
}
辗转相除,求最大公约数,很经典的小题目

#include"iostream"
using namespace std;
int gcd(int m,int n)
{
return n==0?m:gcd(n,m%n);
}
i