求自然数m和n的最大公约数 用c++ 编写

请用下面两种方法分别实现:

一: 连续整数检测
1.t=min{m,n}
2.m除以t,如果余数为0,则执行步骤3,否则执行步骤4
3. n除以t,如果余数为0,返回t的值作为结果,否则执行步骤4
4.t=t-1,转第2步

二:欧几里得算法
1.r=m%n
2.循环直到r=0
2.1 m=n
2.2 n=r
2.3 r=m%n
3.输出n

*要写程序

/***
*@author:banxi1988
*@date:2010-12-01
*/

#include<iostream>
using namespace std;

/* 求自然数m和n的最大公约数 欧几里得算法.
函数头可以写成 unsigned int ( unsigned int u,unsigned v) 下同
*/
static inline size_t
gcd (size_t u, size_t v)
{
do
{
size_t t = u % v;
u = v;
v = t;
}
while (v);

return u;
}

/* 求自然数m和n的最大公约数 连续整数检测法. */
static inline size_t
cgcd (size_t u, size_t v)
{
size_t t = u>v?v:u;
do{
if((u%t==0)&&(v%t==0))return t;
else t--;
}while(t>0);

}
int main(void){
size_t m,n;
cout<<"请输入两个正整数:"<<endl;
cin>>m>>n;

cout<<m<<","<<n<<"的用连续整数检测法算得最大公约数是:"<<cgcd(m,n)<<endl;
cout<<m<<","<<n<<"的用欧几里得算法算得最大公约数是:"<<gcd(m,n)<<endl;

return 0;
}
/***运行结果如下:

请输入两个正整数:
3 5
3,5的用连续整数检测法算得最大公约数是:1
3,5的用欧几里得算法算得最大公约数是:1
---------------------------------------------
请输入两个正整数:
8 48
8,48的用连续整数检测法算得最大公约数是:8
8,48的用欧几里得算法算得最大公约数是

**/
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-12-02
一:
int gcd(int n,int m)
{
for(t=min(n,m);;t--)
if(!m%t && !n%t) break;
return t;
}
二:
int gcd(int n,int m)
{
return m==0?n:gcd(m,n%m);
}//这里要保证n≥m
第2个回答  2010-12-01
不给分! XX

C++ 求m,n最大公约数
include <iostream>using namespace std;int main(){int m,n,r;cout<<"请输入m,n:";cin>>m>>n;if (m>n)r=n;else r=m;while (r>1)if (m%r==0 $$ n%r==0) \/\/看这儿,$$ 与 && 是不一样的break;elser--;cout<<"最大公约数:"<<r<<endl;return 0;} ...

C++编程题:int fund(int m,int n),求M和N的最大公约数和最小公倍数.
求最大公约数代码如下:int gcd(int m,int n){ \/\/greatest common divisor return (m%n==0)?n:gcd(n,m%n);} 最小公倍数代码如下 int lcm(int m,int n){ return (m*n\/gcd(m,n));} 使用起来很简单,如果你想要进一步了解 可以去 gcd百科 辗转相除法 百科 ...

C++ 求两个整数 m ,n 的最大公约数
int fun(int m,int n){ \/***begin***\/ return m%n?fun(n,m%n):n;\/***end***\/ } void main(){ void NONO( );\/\/函数声明 int m,n,i,t;printf("Enter m,n :\\n");scanf("%d,%d",&m,&n);if(m>n) { t=m; m=n; n=t; } printf("The Highest Common Divisor ...

用c++编写程序:输入两个正整数m和n,求其最大公约数
c++也可以使用scanf和printf来输入输出,并且比较不易出错,最大公约数使用欧几里德辗转相除法伪代码如下:include<iostream>#include<stdlib.h>using namespace std;int main(){ int m,n,m_cup,n_cup,res; cin>>m>>n; if(m > 0 && n > 0) { m_cup=m; n_cup=n; res=m_cup...

C++实现输入两个正整数m和n,求其最大公约数和最小公倍数?
scanf("%d %d",&m,&n);c = m < n ? m : n ; \/\/ 取m n 中较小的数,赋值给c \/\/ for(i = 2 ; i <= c ; i++){ if( m % i == 0 && n % i == 0){ printf("m 与 n 的最大公约数为%d,",i);break;} } if(i == c+1)printf("没有最大公约数 ")...

用c++编程:接收用户输入的两个正整数m和n,求其最大公约数和最小公倍...
c++也可以使用scanf和printf来输入输出,并且比较不易出错,最大公约数使用欧几里德辗转相除法伪代码如下:c=m mod nwhile c!=0 do {m=n n=c c=m mod n}print(n) 而最小公倍数就是m*n\/gcd(m,n)

用c++输入两个正整数m和n 求其最大公约数和最小公倍数
include <iostream> using namespace std;int main(){ int m,n,rem=1;cin >> m >> n;\/\/输入两个数 int a= m,b=n;\/\/保留两个数 while(rem!=0){ rem=m%n;m=n;n=rem;} cout << "最大公约数为:" << m << endl;cout << "最小公倍数为:" << a*b\/m << endl;re...

c++语言、输入两个正整数m和n,求其最大公约数和最小公倍数。
h> int main(){ int a,b,t,r;printf("请输入两个数字:\\n");scanf("%d %d",&a,&b);if(a

C++编程 输入两个正整数m和n,求其最大公约数和最小公倍数
m : n; for(int i=1;i<min;i++) { if(m%i==0&&n%i==0) { temp1=i; } } cout<<"公约数:"<<temp1<<endl; \/\/公倍数问题 temp2 = m * n \/ temp1; cout<<"公倍数:"<<temp2<<endl; return 0;} ...

C++实现输入两个正整数m和n,求其最大公约数和最小公倍数
num1, num2;if(a < b){ temp = a;a = b;b = temp;} num1 = a;num2 = b;while(num2 != 0){ temp = num1 % num2;num1 = num2;num2 = temp;} cout << "最大公约数为:" << num1 << " 最小公倍数为:" << (a * b) \/ num1 << endl;return 0;} ...

相似回答