【C/C++】计算两个整数的最大公约数和最小公倍数
算法一
任何>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。
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++】计算两个整数的最大公约数和最小公倍数的更多相关文章
- c 求两个整数的最大公约数和最小公倍数
//求最大公约数是用辗转相除法,最小公倍数是根据公式 m,n 的 最大公约数* m,n最小公倍数 = m*n 来计算 #include<stdio.h> //将两个整数升序排列 void ...
- 上机题目(0基础)-计算两个正整数的最大公约数和最小公倍数(Java)
题目例如以下:
- 【C语言】写一个函数,并调用该函数求两个整数的最大公约数和最小公倍数
程序分析: 在数学中,两个数的最小公倍数=两个数的乘积/两数的最大公约数. 求两个数的最大公约数,运用辗转相除法:已知两个整数M和N,假定M>N,则求M%N. 如果余数为0,则N即为所求:如果余 ...
- java 利用辗除法求两个整数的最大公约数和最小公倍数
题目:输入两个正整数m和n,求其最大公约数和最小公倍数. 程序分析:利用辗除法. package Studytest; import java.util.Scanner; public class P ...
- php取两个整数的最大公约数算法大全
php计算两个整数的最大公约数常用算法 <?php//计时,返回秒function microtime_float (){ list( $usec , $sec ) = explode ( &q ...
- javascript 计算两个整数的百分比值
///计算两个整数的百分比值 function GetPercent(num, total) { num = parseFloat(num); total = parseFloat(total); i ...
- Java初学者作业——分别计算两个整数加、减、乘、除的结果并显示,要求除法保留两位小数。
返回本章节 返回作业目录 需求说明: 分别计算两个整数加.减.乘.除的结果并显示,要求除法保留两位小数. 实现思路: 接收用户控制台输入的两个整数. 实现两个整数的加.减.乘.除的运算并输出结果. 除 ...
- 求两个整数的最大公约数GCM
思路分析: (1)求差判定法: 如果两个数相差不大,可以用大数减去小数,所得的差与小数的最大公约数就是原来两个数的最大公约数.例如:求78和60的最大公约数.78-60=18,18和60的最大公约数 ...
- 《Advanced Bash-scripting Guide》学习(十九):两个整数的最大公约数
本文所选的例子来自于<Advanced Bash-scripting Gudie>一书,译者 杨春敏 黄毅 #!/bin/bash #求两个整数的最大公约数 E_BADARGS= #如果参 ...
随机推荐
- <LeetCode OJ> 204. Count Primes
Description: Count the number of prime numbers less than a non-negative number, n. 分析: 思路首先:一个数不是合数就 ...
- intellij idea 的常用有用快捷键
ctrl + R:替换(这一点和office 中的ctrl + H不一样) ctrl + alt + L:自动整理代码(不会整理注释文件) ctrl + alt:(自动导入包,不能批量导入,有人评论批 ...
- Odoo10尝鲜:MRP 10 新概念
OEE [ overall equipment Effectiveness 整体设备效率 ] 整體設備效率是整合稼働率 (Availability).產能效率 (Performance).良率 (Qu ...
- Python+Selenium框架 ---自动化测试报告的生成
本文来介绍如何生成自动化测试报告,前面文章尾部提到了利用HTMLTestRunner.py来生成自动化测试报告.关于HTMLTestRunner不过多介绍,只需要知道是一个能生成一个HTML格式的网页 ...
- win7-64bit下基于VMware12.5安装rhel-server-6.3-i386
/************************************************************************************* 宿主PC:win7-64b ...
- Flash制作和软件使用
Flash制作和软件使用 2014-11-09 ——君子善假于物也 引子 虽说FLASH在随着HTML5的发展而受阻,尤其移动终端都不再支持它了,但是在一段时间内还是重要的.近期朋友说要结婚,想弄个电 ...
- java ArrayList倒序
用Collections.reverse(list)即可.如:List<String> list = Arrays.asList(new String[] {"aa", ...
- 转_【大话IT】你离大数据架构师有多远?
话题背景: 首先,先科普下“数据架构师”的相关职责:数据架构师要负责建立和维持公司数据储存的技术基准,策划硬体和软体的结构,确保数据储存系统可以支持未来的数据量和分析需求. 据了解,美国地区数据架构师 ...
- Cocos2d-x3.1FileUtilsTest使用
Cocos2d-x3.1中FileUtils的使用:本使用教程是基于HelloWorld的.仅仅需在HelloWorld的init()函数中加入例如以下代码 //头文件 #include " ...
- VS重置命令:devenv.exe/resetuserdata
VS命令行下执行下面的命令: devenv.exe/resetuserdata