2019独角兽企业重金招聘Python工程师标准>>>

import org.junit.Test;import java.util.ArrayList;
import java.util.List;/*** 求两个数的最大公约数* @author shadowolf* @date 2018/10/24 12:25*/
public class GreatestCommonDivisor {@Testpublic void greatestCommonDivisor() throws Exception {int result1 = GreatestCommonDivisor.getGreatestComonDivisor1(24, 60);System.out.println("result1: " + result1);int result2 = GreatestCommonDivisor.getGreatestComonDivisor2(24, 60);System.out.println("result2: " + result2);int result3 = GreatestCommonDivisor.getGreatestComonDivisor3(24, 60);System.out.println("result3: " + result3);}/*** 欧几里得算法*/public static int getGreatestComonDivisor1(int num1, int num2) throws Exception {if (num1 < 1 || num2 < 1) {throw new Exception("params error !");}if (num1 < num2) {int temp = num1; num1 = num2; num2 = temp;}int r = num1 % num2;while (r != 0) {num1 = num2;num2 = r;r = num1 % num2;}return num2;}/*** 连续整数检测算法*/public static int getGreatestComonDivisor2(int num1, int num2) throws Exception {if (num1 < 1 || num2 < 1) {throw new Exception("params error !");}if (num1 < num2) {int temp = num1; num1 = num2; num2 = temp;}if (num1 % num2 == 0) {return num2;}int t = num2 - 1;while (num1 % t != 0 || num2 % t != 0) {t--;}return t;}/*** 质因数算法*/public static int getGreatestComonDivisor3(int num1, int num2) throws Exception {if (num1 < 1 || num2 < 1) {throw new Exception("params error !");}if (num1 < num2) {int temp = num1; num1 = num2; num2 = temp;}// 求出2-n的所有质数序列List<Integer> primeNumList = getToNPrimeNumber(num1);List<Integer> num1PrimeList = getNAllPrimeNumber(num1, primeNumList);List<Integer> num2PrimeList = getNAllPrimeNumber(num2, primeNumList);List<Integer> commonList = getTwoLCommonList(num1PrimeList, num2PrimeList);int result = 1;for (Integer l : commonList) {result *= l;}return result;}/*** 求2-n中的质数序列* 使用算法: 埃拉托色尼筛选法*/public static List<Integer> getToNPrimeNumber(int n) {List<Integer> primeNumList = new ArrayList<>();int[] nums = new int[n+1];for (int p = 2; p <= n; p++) {nums[p] = p;}for (int p = 2; p < Math.floor(Math.sqrt(n)); p++) {int nn = p * p;while (nn <= n) {nums[nn] = 0;nn += p;}}for (int p = 2; p <= n; p++) {if (nums[p] != 0) {primeNumList.add(nums[p]);}}return primeNumList;}/*** 求n的所有质因数序列*/public static List<Integer> getNAllPrimeNumber(Integer num, List<Integer> primeNumList) {List<Integer> numPrimeList = new ArrayList<>();int i = 0;while (i < primeNumList.size() && num != 1) {if (num %  primeNumList.get(i) == 0) {numPrimeList.add(primeNumList.get(i));num /= primeNumList.get(i);i = 0;continue;}i++;}return numPrimeList;}/*** 求两个序列的共有序列*/public static List<Integer> getTwoLCommonList(List<Integer> list1, List<Integer> list2) {List<Integer> commonList = new ArrayList<>();for (Integer l : list1) {if (list2.contains(l)) {commonList.add(l);}}return commonList;}}

转载于:https://my.oschina.net/shadowolf/blog/2252066

求两个数的最大公约数的3种办法相关推荐

  1. 【C语言】实现求两个数的最大公约数【四种算法】

    题目 给定两个数,求这两个数的最大公约数 例如: 输入:20 40 输出:20 解题思路 最大公约数:即两个数据中公共约数的最大者 求解的方式比较多,暴力穷举.辗转相除法.更相减损法.Stein算法算 ...

  2. 辗转相除法是求两个数的最大公约数的方法。

    题目: /*      第五题 辗转相除法是求两个数的最大公约数的方法. */ 代码部分: #include<iostream> using namespace std;int x; in ...

  3. python编写函数、计算三个数的最大公约数_python 函数求两个数的最大公约数和最小公倍数...

    1. 求最小公倍数的算法: 最小公倍数 = 两个整数的乘积 / 最大公约数 所以我们首先要求出两个整数的最大公约数, 求两个数的最大公约数思路如下: 2. 求最大公约数算法: 1. 整数A对整数B进行 ...

  4. 百度web前端面试题之求两个数的最大公约数和最小公倍数

    求两个数的最大公约数和最小公倍数,好像是第三题, 找到如下简洁写法: <1> 用辗转相除法求最大公约数 算法描述: m对n求余传给自己,再次求余, 若余数等于0 则 n 为最大公约数 &l ...

  5. 程序员数学基础【四、取模应用-判断奇偶数、判断素数、求两个数的最大公约数、水仙花数】(Python版本)

    测试使用语言:[Python] 由于此类语言入门非常容易,哪怕初中生亦可以,并且本科/研究生写论文.做实验多数所用语言都是[Python]故而选择此语言. 代码运行平台:[win10 x64] 代码环 ...

  6. C语言试题七十三之请编写函数求两个数的最大公约数

    1. 题目 编写函数:求两个数的最大公约数. 如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数.几个自然数公有的约数,叫做这几个自然数的公约数.公约数中最大的一个公约数,称为这几个自 ...

  7. 求两个数的最小公约数和最小公倍数

    题目: 求两个数的最小公约数和最小公倍数 思路: 求最大公约数: 欧几里得在其<几何原本>中提出的欧几里得算法,有称辗转相除法,  具体做法是如果q和r分别是m除以n的商及玉树,m=nq+ ...

  8. 暴力 gcd __gcd (详解)C语言求两个数的最大公约数

    首先我们要先知道gcd是什么东西? GCD作为缩写意义有多种.它通常表示最大公约数(greatest common divisor,简写为gcd:或highest common factor,简写为h ...

  9. 编写两个函数分别求两个数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果,两个数由键盘输入。 输入输出格式示例: 输入:24 16 输出:zdgys=8,zxgbs=48

    编写两个函数分别求两个数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果,两个数由键盘输入. 输入输出格式示例: 输入:24 16 输出:zdgys=8,zxgbs=48 #include ...

最新文章

  1. oracler日期函数相差六个月_Oracle数据库之SQL单行函数---日期函数集锦
  2. 只有一流的人才能干出一流的工作,只有具备大量一流的人才的企业才能成为一流的企业...
  3. MAC PHP7 如何disable xdebug
  4. 南京财经大学计算机专业读研,计算机考研报录比比较的院校:南京财经大学
  5. 查询记录时rs.previous()的使用
  6. charles抓包显示乱码解决方法
  7. 深度学习实践指南(二)—— 符号编程
  8. iOS底层探索之多线程(十)—GCD源码分析( 信号量dispatch_semaphore_t)
  9. phpcms v9二次开发之模型类的应用(2)
  10. Android腾讯微博开放平台入门(四)发表一条文字微博
  11. 微带天线馈电方法 [搬运]
  12. 2022年N1叉车司机考试题及N1叉车司机理论考试
  13. 天猫精灵开发网关php开发,天猫精灵对接
  14. UDE2021开展首日回顾,“黑科技”含量超标了!
  15. GTX 1070Ti正式发布!iGame Vulcan X家族再添新成员
  16. CoreOS发起的友好兼容Kubernetes的存储系统:Torus
  17. 有了这几个网站,再也不怕字体侵权啦
  18. react native Android 手机摇一摇与菜单键无效
  19. Java简易图书DVD管理系统
  20. RK3288功能介绍

热门文章

  1. ubuntu 下 安装 sublime Text3
  2. 外贸电商选择美国服务器的优势分析
  3. git 学习之基础知识
  4. 记录从前端到后端--博客项目
  5. React-Native学习笔记
  6. mssql查询所有上下级
  7. 好用的工具---screen命令
  8. 回到顶部最简单的JQuery实现代码
  9. PHP 获取页面地址参数详解整理
  10. 初学python之路-day20