首页 > 编程知识 正文

python实现辗转相除,python最小公倍数辗转相除法

时间:2023-05-03 15:05:14 阅读:273062 作者:1708

展开全部

自然语言描述

用辗转相除法确定两个正整数e69da5e6ba903231313335323631343130323136353331333339666665 a 和 b(a≥b) 的最大公因数gcd(a,b):

当a mod b=0 时gcd(a,b)=b,否则

gcd(a,b) = gcd(b,a mod b)

递归或循环运算得出结果

伪代码

这个算法可以用递归写成如下:

function gcd(a,b) {

if b<>0

return gcd(b,a mod b);

else

return a;

}

gcd 简易函数

c语言辗转相除代码:

int GCD(int a,int b)

{returnb==0?a:GCD(b,a%b);}

C++语言实现

#include

using namespace std;

int a , b , a1 , b2 , l;

int gcd(int x , int y)

{

if(!y)

return x;

else return gcd(y , x%y);

}

int main()

{

std::cout << "请输入两个正整数,计算它们的最大公约数" << endl ;

int a , b , ans;

std::cin >> a >> b;

if(a > b)

ans = gcd(a , b);

else ans = gcd(b , a);

cout << ans;

return 0;

}

C语言实现

/*题目:输入两个正整数,求其最大公约数。*/

#include

unsigned gcd ( unsigned,unsigned ) ;

int main( void )

{

unsigned m,n;

printf("请输入两个正整数:");

scanf("%u%u",&m,&n);

printf("%u与%u的最大公约数为:%un",m,n,gcd ( m,n ) );

return 0;

}

/* 功能:返回正整数m和n的最大公约数*/

unsigned gcd ( unsigned m,unsigned n )

{

unsigned temp;

if (m

{

temp=m;

m=n;

n=temp;

}

if ( m % n == 0)

{

return n;

}

else

{

return gcd ( n,m % n) ;

}

}

/*题目:输入两个非负整数u和v,求其最大公约数。*/

#include   main()  {  int u,v,r;  printf("please input u and v:");  scanf("%d,%d",&u,&v);  while(v!=0)  {  r=u%v;  u=v;  v=r;  }  printf("%dn",u);  }

C#语言实现

static int sucDivison/*除法*/(int m, int n)  {  int remainder = 0;  if (m % n == 0)  {  return n;  }  else  {  do  {  remainder = m % n;  m = n;  n = remainder;  } while (remainder > 0);  }  if (n == 0)  {  return m;  }  return n;  }

Basic实现

INPUT m,n

DO

r=m MOD n

m=n

n=r

LOOP UNTIL r=0

PRINT m

END

Pascal实现

function gcd(a,b:integer):integer;

begin

if b=0 then gcd:=a

else gcd:=gcd (b,a mod b);

end ;

Common Lisp实现

(defun my-gcd (number-a number-b)

(do ((r (mod number-a number-b) (mod ea eb))(eb number-b r) (ea number-a eb))

((= 0 r) eb)))

Java 实现

/**

*

* @return int

* @tags @param m

* @tags @param n

* @tags @return

* @todo 【方法二】利用辗除法

*/

public static int gcd(int m, int n) {

while (true) {

if ((m = m % n) == 0)

return n;

if ((n = n % m) == 0)

return m;

}

}

Python实现

#递归解决最大公约数问题

def gcd(x,y):

if y != 0:

return gcd(y,x%y)

else:

return x

x = int(input('请输入第一个数字:'))

y = int(input('请输入第二个数字:'))

print('%d 和 %d 的最大公约数为:' %(x,y),gcd(x,y))

数据举例

其中“a mod b”是指取 a ÷ b 的余数。

例如,123456 和 7890 的最大公因子是 6,这可由下列步骤看出: a b a mod b 123456 7890 5106 7890 5106 2784 5106 2784 2322 2784 2322 462 2322 462 12 462 12 6 12 6 0 时间复杂度

辗转相除法的运算速度为 O(n),其中 n 为输入数值的位数。

辗转相除法处理大数时非常高效,它需要的步骤不会超过较小数的位数(十进制下)的五倍。高挑的饼干(GabrielLamé)于1844年证明了这点,开创了计算复杂性理论。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。