算法一

任何>1的整数都可以写成一个或多个素数因子乘积的形式,且素数乘积因子以非递减序出现。

则整数x,y可以分别标记为:
x=p1x1p2x2...pmxm

y=p1y1p2y2...pmym

(其中p1,p2,....是素数,若有必要素数因子的指数xj或yj可以为0)

(1)最大公约数 gcd(x,y)=p1min(x1,y1)p2min(x2,y2)...pmmin(xm,ym)

(2)最小公倍数 lcm(x,y)=p1max(x1,y1)p2max(x2,y2)...pmmax(xm,ym)

(3)因此,亦可得:lcm(x,y)*gcd(x,y)=x*y

按如上思路计算gcd(x,y)至少需要如下两步

step1: decompose_to_primes(int n);//把整数n分解成素数相乘的形式

step2:get_gcd(int x,int y);//根据step1的结果按照公式(1)计算gcd(x,y)

分明显计算量比较大。

实际上从编程的角度来看,在x,y的数值不是很大的情况下。若是单纯的计算最大公约数和最小公倍数可以不必这么复杂,可以从大到小遍历min(x,y)的约数,找到的第一个公约数即为所求。

 int get_gcd(int x,int y)
{
int temp;
int i;
if(x>y)
{
temp=x;
x=y;
y=temp;
}
if(y%x==)
return x;
for(i=x/;i>;i--)
if(x%i==)
if(y%i==)
return i;
return ;
} int get_lcm(int x,int y)
{
return (x*y)/(get_gcd(x,y));
}

算法二

用Euclid算法(即辗转相除法)

step1、令r为a/b所得余数(0≤r<b)。若 r= 0,算法结束,则b 即为所求,否则执行step2。

step2、a←b,b←r,重新执行step1。
 int gcd(int x,int y)//Euclid method
{
int r;
if(x<y)
{
r=x;
x=y;
y=r;
}
r=x%y;
while(r)
{
x=y;
y=r;
r=x%y;
}
return y;
}

【C/C++】计算两个整数的最大公约数和最小公倍数的更多相关文章

  1. c 求两个整数的最大公约数和最小公倍数

    //求最大公约数是用辗转相除法,最小公倍数是根据公式 m,n 的 最大公约数* m,n最小公倍数 = m*n 来计算 #include<stdio.h> //将两个整数升序排列 void ...

  2. 上机题目(0基础)-计算两个正整数的最大公约数和最小公倍数(Java)

    题目例如以下:

  3. 【C语言】写一个函数,并调用该函数求两个整数的最大公约数和最小公倍数

    程序分析: 在数学中,两个数的最小公倍数=两个数的乘积/两数的最大公约数. 求两个数的最大公约数,运用辗转相除法:已知两个整数M和N,假定M>N,则求M%N. 如果余数为0,则N即为所求:如果余 ...

  4. java 利用辗除法求两个整数的最大公约数和最小公倍数

    题目:输入两个正整数m和n,求其最大公约数和最小公倍数. 程序分析:利用辗除法. package Studytest; import java.util.Scanner; public class P ...

  5. php取两个整数的最大公约数算法大全

    php计算两个整数的最大公约数常用算法 <?php//计时,返回秒function microtime_float (){ list( $usec , $sec ) = explode ( &q ...

  6. javascript 计算两个整数的百分比值

    ///计算两个整数的百分比值 function GetPercent(num, total) { num = parseFloat(num); total = parseFloat(total); i ...

  7. Java初学者作业——分别计算两个整数加、减、乘、除的结果并显示,要求除法保留两位小数。

    返回本章节 返回作业目录 需求说明: 分别计算两个整数加.减.乘.除的结果并显示,要求除法保留两位小数. 实现思路: 接收用户控制台输入的两个整数. 实现两个整数的加.减.乘.除的运算并输出结果. 除 ...

  8. 求两个整数的最大公约数GCM

    思路分析: (1)求差判定法:  如果两个数相差不大,可以用大数减去小数,所得的差与小数的最大公约数就是原来两个数的最大公约数.例如:求78和60的最大公约数.78-60=18,18和60的最大公约数 ...

  9. 《Advanced Bash-scripting Guide》学习(十九):两个整数的最大公约数

    本文所选的例子来自于<Advanced Bash-scripting Gudie>一书,译者 杨春敏 黄毅 #!/bin/bash #求两个整数的最大公约数 E_BADARGS= #如果参 ...

随机推荐

  1. &lt;LeetCode OJ&gt; 204. Count Primes

    Description: Count the number of prime numbers less than a non-negative number, n. 分析: 思路首先:一个数不是合数就 ...

  2. intellij idea 的常用有用快捷键

    ctrl + R:替换(这一点和office 中的ctrl + H不一样) ctrl + alt + L:自动整理代码(不会整理注释文件) ctrl + alt:(自动导入包,不能批量导入,有人评论批 ...

  3. Odoo10尝鲜:MRP 10 新概念

    OEE [ overall equipment Effectiveness 整体设备效率 ] 整體設備效率是整合稼働率 (Availability).產能效率 (Performance).良率 (Qu ...

  4. Python+Selenium框架 ---自动化测试报告的生成

    本文来介绍如何生成自动化测试报告,前面文章尾部提到了利用HTMLTestRunner.py来生成自动化测试报告.关于HTMLTestRunner不过多介绍,只需要知道是一个能生成一个HTML格式的网页 ...

  5. win7-64bit下基于VMware12.5安装rhel-server-6.3-i386

    /************************************************************************************* 宿主PC:win7-64b ...

  6. Flash制作和软件使用

    Flash制作和软件使用 2014-11-09 ——君子善假于物也 引子 虽说FLASH在随着HTML5的发展而受阻,尤其移动终端都不再支持它了,但是在一段时间内还是重要的.近期朋友说要结婚,想弄个电 ...

  7. java ArrayList倒序

    用Collections.reverse(list)即可.如:List<String> list = Arrays.asList(new String[] {"aa", ...

  8. 转_【大话IT】你离大数据架构师有多远?

    话题背景: 首先,先科普下“数据架构师”的相关职责:数据架构师要负责建立和维持公司数据储存的技术基准,策划硬体和软体的结构,确保数据储存系统可以支持未来的数据量和分析需求. 据了解,美国地区数据架构师 ...

  9. Cocos2d-x3.1FileUtilsTest使用

    Cocos2d-x3.1中FileUtils的使用:本使用教程是基于HelloWorld的.仅仅需在HelloWorld的init()函数中加入例如以下代码 //头文件 #include " ...

  10. VS重置命令:devenv.exe/resetuserdata

    VS命令行下执行下面的命令: devenv.exe/resetuserdata