问题1
求两个自然数的最大公约数
算法1 找两个数的公共因子目前看只能用蛮力发逐个尝试,可以用2~min{m,n}进行枚举尝试。短除法求最大公约数的伪代码描述如下。
输入:两个自然数m和n
输出:两个数的最大公约数
1.factor ==1;
2.循环变量i从2~min{m,n},执行下述操作;
2.1如果i是m和n的公共因子,则执行下述操作;
2.1.1 factor == factor * i;
2.1.2 m = m/i;n = n/i;
2.2 如果i不是m和n 的公因子,则i= i+1;
输出factor
求解算法的伪代码
int CommFactor(int m,int n){
int i,factor =1;
for(i =2;i<=m&&i<=n;i++){
while(m%i==0&&n%i==0)
{
factor = factor *i;
m=m/i;n=n/i;
}
}
return factor;
}
下面我们介绍欧几里得算法
输入:两个自然数m和n;
输出:两个数的最大公约数;
1.r=m/n;
2.循环直到r等于0;
m=n;
n=r;
r = m%n;
3.输出n
int CommFactor(int m ,int n){
int r = m%n;
while(r!=0)
{
m=n;
n=r;
r=m%n;
}
return n;
}