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

1、分解素因数法:把每个数分别分解素因数,再把各数中的全部公有素因数提取出来连乘,所得的积就是这几个数的最大公约数;先把这几个数的质因数写出来,最小公倍数等于它们所有的质因数的乘积;

2、短除法:短除法求最大公约数,先用这几个数的公约数连续去除,一直除到所有的商互质为止,然后把所有的除数连乘起来,所得的积就是这几个数的最大公约数;

把数字依次相乘,最小公倍数等于它们所有因数的乘积;

public class LeastCommonMultiple {
// 定义两个数
private int max;
private int min;

// 构造函数
public LeastCommonMultiple(int max, int min) {
super();
this.max = max;
this.min = min;
}

// 求最大公约数
public int Gcd(int min, int max) {
int temp = 0;
int k = 0;
if (max < min) {
temp = min;
min = max;
max = temp;
}
while (max % min != 0) {
k = max % min;
max = min;
min = k;
}
return min;
}

// 求最小公倍数
public int Lcm(int min, int max) {
return min * max / Gcd(min, max);
}

}

时间: 2024-10-12 22:16:45

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

常见算法:C语言求最小公倍数和最大公约数三种算法

最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们的公倍数,当中一个最小的公倍数是他们的最小公倍数,相同地,若干个整数公有的倍数中最小的正整数称为它们的最小公倍数,维基百科:定义点击打开链接 求最小公倍数算法: 最小公倍数=两整数的乘积÷最大公约数 求最大公约数算法: (1)辗转相除法 有两整数a和b: ① a%b得余数c ② 若c=0,则b即为两数的最大公约数 ③ 若c≠0,则a=b,b=c,再回去运行① 比如求27和15的最大公约数过程为: 27÷15 余1215÷12余312÷3余0

C语言求最小公倍数和最大公约数三种算法(经典)

把以前写的一些经验总结汇个总,方便给未来的学弟学妹们做个参考! --------------------------永远爱你们的:Sakura 最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们的公倍数,其中一个最小的公倍数是他们的最小公倍数,同样地,若干个整数公有的倍数中最小的正整数称为它们的最小公倍数,维基百科:定义点击打开链接 求最小公倍数算法: 最小公倍数=两整数的乘积÷最大公约数 求最大公约数算法: (1)辗转相除法 有两整数a和b: ① a%b得余数c ② 若c=0,则b即为两

(hdu step 2.1.1)最小公倍数(使用最大公约数来辅助求最小公倍数)

题目: 最小公倍数 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3609 Accepted Submission(s): 2596   Problem Description 给定两个正整数,计算这两个数的最小公倍数. Input 输入包含多组测试数据,每组只有一行,包括两个不大于1000的正整数. Output 对于每个测试用例,给出这

最小公倍数和最大公约数

最近做到一个 分核桃的题.原题描述如下,就是一个求最小公倍数的题.这个知识点已经忘了..就去百度查了一下,就有了这一篇总结. 这个是百度上的定义. 另外一个很重要的点 就是:最小公倍数=x*y/最大公约数:所以重点就转到了求最大公约数上.最大公约数可以用以下三种方法:辗转相除法,更相折损法(相减法),穷举法.代码如下. 1 import java.util.Scanner; 2 3 4 public class 最小公倍数{ 5 public static void main(String[]

light_oj 1236 求最小公倍数( lcm(a,b) )等于n的数对 素因数分解

light_oj 1236 求最小公倍数( lcm(a,b) )等于n的数对  素因数分解 H - Pairs Forming LCM Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu Submit Status Practice LightOJ 1236 Description Find the result of the following code: long long pairsFormL

NEFU 116 两仪剑法 【求最小公倍数】

题目链接:http://acm.nefu.edu.cn/JudgeOnline/status.php?problem_id=116&order=1 解题思路:求最小公倍数 #include<stdio.h> long long gcd(long long a,long long b) { if(b==0) return a; else return gcd(b,a%b); } int main() { long long m,n; while(scanf("%lld %lld

projecteuler----&gt;problem=5----Smallest multiple n个数求最小公倍数

title: 2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder. What is the smallest positive number that is evenly divisible by all of the numbers from 1 to 20? 翻译: 2520是能被1到10的自然数整除的最小正整数. 那么,能被1到20

hdu5392--Infoplane in Tina Town(置换群+质因子分解求最小公倍数)

题目链接:点击打开链接 题目大意:给出一种操作a[1],a[2],,,,a[n],代表每交换一次,1位置的数到a[1]位置,2位置的数到a[2]位置,,, 问最终交换多少次可以恢复初始的情况. 题目给出一个置换,要求置换的次数,也就是所有轮换个数的最小公倍数.首先求出所有轮换的个数,然后求最小公倍数的时候不能用gcd,因为Mod的取余太大,所以用质因子分解,统计每个质因子出现的最多次数,计算最终的值. #include <cstdio> #include <cstring> #in

多种方法求最大公约数+求最小公倍数

本文将给出求两个数a和b的最大公约数的几种可行方法. 方法一:辗转相除法 算法分析:有两个数a和b,用辗转相除法. 不妨设a>b, 首先求a和b的余数,b赋值给a,余数赋值给b: 重复以上操作,直到余数为0: b值即为两数的最大公约数. 代码: 1 int zdgys(int a,int b) 2 { 3 int temp; 4 if( a<0 ) a=-a; 5 if( b<0 ) b=-b; 6 if( a<b ) { temp=a;a=b;b=temp; } // 让a>