最大公倍数,最小公约数

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <algorithm>
  4. #include <iostream>
  5. using namespace std;
  6. //int f[1010]= {0, 1, 1};
  7. __int64 lcm(__int64 a,__int64 b) // 最小公倍数
  8. {
  9. __int64 c = b%a;
  10. if(a > b) return lcm(b, a);
  11. if(c==0) return b;
  12. return lcm(c,a)/c*b;
  13. }
  14. __int64 gcd(__int64 x, __int64 y) //最大公约数
  15. {
  16. __int64 m;
  17. if(x<y)
  18. return gcd(y,x);
  19. if(x%y!=0)
  20. return gcd(y,x%y);
  21. else return y;
  22. }

来自为知笔记(Wiz)

附件列表

时间: 2024-10-12 03:14:36

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

最小公约数(欧几里得算法&amp;&amp;stein算法)

求最小公约数,最容易想到的是欧几里得算法,这个算法也是比较容易理解的,效率也是很不错的.也叫做辗转相除法. 对任意两个数a,b(a>b),d=gcd(a,b),如果b不为零,那么gcd(a,b)=gcd(b,a%b) 证明: 令 r=a%b,即存在k,使得 a=b*k+r,那么r=a-b*k:显然r>=0,  r%d=((a%d)-(b*k)%d)%d,因为a%d=b%d=0,所以r%d=0: 因此求gcd(a,b)可以转移到求gcd(b,a%b),那么这就是个递归过程了,那什么时候递归结束呢

欧几里得算法——求取最小公约数

1 import java.util.Scanner; 2 3 /** 4 * Created by Administrator on 14-5-20. 5 */ 6 public class Euclid { 7 public static void main(String[] args){ 8 Scanner scanner=new Scanner(System.in); 9 String str=scanner.nextLine(); 10 int a=Integer.parseInt(s

最小公约数

[摘要]一个朋友在展BOM的时候有这样的需求,两列字段(数值):A ,B   A=用量,B=底数,组成用量=用量/底数.A/B,若能被整除,显示整除的结果,若不能整除显示分数形式A/B(分数形式要是约分后的格式)3/6=1/3. 我的思路: 1.SQL取余判断是否能被整除 2.撰写两个整形数值的最大公约数,然后分子与分母分别除以最大公约数. 其中进行转换化成字符串格式. 一.自定义最大公约数函数: Create FUNCTION [dbo].[GetMaxgongyue] ( @num1 int

一个好的函数(gcd)求最小公约数

这个函数是我无意中看到的很不错,很给力,我喜欢 是用于求最小公约数的 简单的描述就是,记gcd(a,b)表示非负整数a,b的最大公因数,那么:gcd(a,b)=gcd(b,a%b)或者gcd(a,0)=gcd(0,a)=a 请看代码 int gcd(int a,int b){ if(a==0) return b; if(b==0) return a; return gcd(b,a%b);} 例题 链接 http://acm.hdu.edu.cn/showproblem.php?pid=1108

最大公约数和最小公约数

#include<iostream> using namespace std; void main() { int x,y,a,b,m=1; cout<<"please input the number:"<<endl; cin>>x>>y; if(x>y) { a=x;b=y; } else { a=y;b=x; } do { m=a%b; a=b; b=m; }while(m!=0); cout<<&qu

公倍数与公约数

#include<stdio.h> #include <iostream> #include<math.h> using namespace std; //公约数 int getCommoDivisor(int x, int y) { int k; if (x < y) { k = x; x = y; y = k; } if (x%y == 0) return abs(y); else return getCommoDivisor(y, x%y); } //公倍数

C语言辗转相除法求2个数的最小公约数

辗转相除法最大的用途就是用来求两个数的最大公约数. 用(a,b)来表示a和b的最大公约数. 有定理: 已知a,b,c为正整数,若a除以b余c,则(a,b)=(b,c). (证明过程请参考其它资料) 例:求 15750 与27216的最大公约数. 解: ∵27216=15750×1+11466 ∴(15750,27216)=(15750,11466) ∵15750=11466×1+4284 ∴(15750,11466)=(11466,4284) ∵11466=4284×2+2898 ∴(11466

从错误中学python(4)——最小公约数与辗转相除法

题目 给你两个正整数a和b, 输出它们的最大公约数 辗转相除法 辗转相除法的步骤 def gcd(b,a): b,a=a,b%a if a==0: return b else: return gcd(b,a) 即就是取如果b与a不能整除,就取a和b除以a的余数再考察是个递归的思路. 理解 可以从两个角度去理解辗转相除法 1.举例法 一张长方形纸,长2703厘米,宽1113厘米.要把它截成若干个同样大小的正方形,纸张不能有剩余且正方形的边长要尽可能大.问:这样的正方形的边长是多少厘米? 解答: 可

2001最大公约数和最小公约数问题

题目描述 Description 输入二个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P,Q的个数 条件:  1.P,Q是正整数 2.要求P,Q以x0为最大公约数,以y0为最小公倍数. 试求:满足条件的所有可能的两个正整数的个数. 输入描述 Input Description 二个正整数x0,y0 输出描述 Output Description 满足条件的所有可能的两个正整数的个数 样例输入 Sample Input 3 60 样例