求最大公约数与最小公倍数

求两正整数的最大公约数,用辗转相除法。

 1 #include<assert.h>
 2
 3 #define swap(a,b,type)  do{ type t; t=a; a=b; b=t; }while(0)
 4
 5  int gcd(int a,int b)
 6 {
 7     int t;
 8     assert(a>0&&b>0);
 9
10     if(a<b)
11         swap(a,b,int);
12     while(b)
13     {
14         t=a%b;
15      a=b;
16      b=t;
17    }
18     return a;
19 }

求两正整数的最小公倍数,方法是a*b/gdc(a,b)

1 #include<assert.h>
2 int lcm(int a,int b)
3 {
4     assert(a>0&&b>0);
5     return a*b/gcd(a,b);
6 }
时间: 2024-10-11 17:48:57

求最大公约数与最小公倍数的相关文章

求最大公约数和最小公倍数

学习C++入门级的题目,求最大公约数和最小公倍数,这里介绍两种求最大公约数的方法,即辗转相除法和辗转相减法.辗转相除法的原理自行百度,辗转相减法的原理就是只要两数不想等就用大数减小数,直至相等,求最小公倍数的方法就是用两数的乘积除以最大公约数. #include<iostream> using namespace std; int maxf(int a,int b)//辗转相减法 { while(a != b) { if(a > b) return a = a - b; else ret

C语言求最大公约数和最小公倍数

求最大公约数和最小公倍数 假设有两个数a和b,求a,b的最大公约数和最小公倍数实际上是一个问题,得出这两个数的最大公约数就可以算出它们的最小公倍数. 最小公倍数的公式是 a*b/m m为最大公约数 因为 a=m*i; b=m*j; 最小公倍数为 m*i*j 那么,下面就开始计算a和b的最大公约数. 更相损减法: <九章算術·方田>作分數約簡時,提到求最大公因數方法:反覆把兩數的較大者減去較小者,直至兩數相等,這數就是最大公因數.這方法除了把除法換作減法外,與輾轉相除法完全相同.例如書中求91和

奇葩的求最大公约数、最小公倍数、分解质因数的做法(C语言)

奇葩的求最大公约数.最小公倍数.分解质因数的做法(C语言) 1 /* 2 最奇葩的求最大公约数与最小公倍数 3 create by laog 4 time 2017年7月27日12:23:14 5 */ 6 7 //两个数的最大公约数 8 //两个数的最小公倍数 9 //将一个正整数分解质因数 --和 2.3.5取余 10 11 #include <stdio.h> 12 13 int main1() 14 { 15 // 3,4 16 //20 17 int v; 18 scanf(&quo

辗转相除法求最大公约数和最小公倍数分析

求最大公约数和最小公倍数 程序分析: (1)最小公倍数=输入的两个数之积除于它们的最大公约数,关键是求出最大公约数: (2)求最大公约数用辗转相除法(又名欧几里德算法) 辗转相除法: #include<stdio.h> int main() { int a,b,c; int raw_a,raw_b; scanf("%d %d",&a,&b); raw_a=a;raw_b=b; c=a%b; while (c!=0) { a=b;b=c; c=a%b; } p

【辗转相除法】求最大公约数和最小公倍数

#include<stdio.h>  void main()   /*  辗转相除法求最大公约数 */   {      int m,n,a,b,t,c;      scanf("%d%d",&a,&b);     m=a;    n=b;     while(b!=0)  /* 余数不为0,继续相除,直到余数为0 */      {    c=a%b;    a=b;     b=c;   }     printf("%d\n", a)

求最大公约数与最小公倍数and输出锥形图案

1:描述:用Python求两个数的最大公约数与最小公倍数.(注意输入的俩个数在正整数范围内) code(代码): a=eval(input('请输入第一个整数:')) b=eval(input('请输入第二个整数:')) c=1 d=a*b if(a<=0 or b<=0): print('输入有误') else: if(a<b): c=a a=b b=c while(c!=0): c=a-b if(c==0): break else: if(c>b): a=c else: a=b

辗转相除法求最大公约数和最小公倍数

要求最小公倍数可先求出最大公约数 设要求两个数a,b的最大公约数 伪代码: int yushu,a,b: while(b不等于0) { yushu=a对b求余 b的值赋给a yushu的值赋给b } 代码: int gongyue() { int yushu,a,b; while(b) { yushu=a%b; a=b; b=yushu; } return b; } 此子函数可以求出两个数的最大公约数n    最小公倍数为a*b/n:

C编程:求最大公约数,最小公倍数。

#include<stdio.h> int main() { int a,b;//两个数 int x,y;//暂时保存a,b以便后面求最小公倍数p=(a*b)/a int p;//最小公倍数 int temp; while(scanf("%d %d",&a,&b)!=EOF)//ctrl+Z退出循环 { x=a; y=b;//暂时保存a,b的原值到x,y中,因为后面a,b的值要变. while(b!=0) { temp=a%b; a=b; b=temp; }

最简单的求最大公约数和最小公倍数的方法

public class Main{  /**   * @param args   */  public static void main(String[] args) {   // TODO Auto-generated method stub   Scanner scan = new Scanner(System.in);   int n,m;   while(scan.hasNext()){    n = scan.nextInt();    m = scan.nextInt();