Java实现欧几里得法求最大公约数GCD
1.求最大公约数
文章目录
- 1.求最大公约数
- (1)穷举算法1
- (2)穷举算法2
- (3)穷举算法3
- (4)欧几里得算法
(1)穷举算法1
package com.java;//课本程序清单5-9,利用穷举法求GCDimport java.util.Scanner;public class GreatestCommonDivisor_1 {public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.println("Enter the first integer: ");int n1 = input.nextInt();System.out.println("Enter the second integer:");int n2 = input.nextInt();int gcd = 1; //初始化gcd为1int k = 2; //可能的最大公约数//从小至大开始枚举while (k <= n1 && k <= n2) {if (n1 % k == 0 && n2 % k == 0) {gcd = k;}k++;}System.out.println("The greatest common divisor for " + n1 + " and " + n2 + " is " + gcd);}
}
(2)穷举算法2
package com.java;//课本课后题5.14求最大公约数import java.util.Scanner;public class GreatestCommonDivisor_2 {public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.println("Enter the first number: ");int firstNumber = input.nextInt();System.out.println("Enter the second number: ");int secondNumber = input.nextInt();//求两个数中的最小数,其实不用求,可以直接从firstNumber递减寻找最大公约数//若firstNumber是最小数,则它就是我们要用的number//若firstNumber不是最小数,那么在secondNumber到firstNumber之间不可能有一个数是它们两个的公约数,if不可能成立,程序不会出错//int number = (firstNumber < secondNumber) ? firstNumber : secondNumber;int gcd = 1; //初始化最大公约数是1//从大至小进行遍历for (int k = firstNumber; k >= 1; k--) {if (firstNumber % k == 0 && secondNumber % k == 0) {gcd = k;break;}}System.out.println("The greatest common divisor for " + firstNumber + " and " + secondNumber + " is " + gcd);}
}
(3)穷举算法3
package com.java;import java.util.Scanner;//课本程序清单22-3,这个求最大公约数的方法,非常有技巧
//m和n的最大公约数无非就是四种情况
//1.m比n大,且n是m的除数,则if (m % n == 0) return n;已经包括此种情况
//2.m比n大,但是n不是m的除数。因为m和n的gcd一定是两者的除数,所以从任意一个数的一半开始向下寻找即可
//3.m比n小,但m不是n的除数。因为m和n的gcd一定是两者的除数,所以从任意一个数的一半开始向下寻找即可
//4.m比n小,且m是n的除数。因为n的除数一定小于等于n的一半,则从n的一半开始向下寻找即可
//综上,2,3,4可以直接归结为另外以中情况,即m%n!=0,因此有以下代码
public class GreatestCommonDivisor_3 {public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.println("Enter the first number: ");int firstNumber = input.nextInt();System.out.println("Enter the second number: ");int secondNumber = input.nextInt();System.out.println("The greatest common divisor for " + firstNumber + " and " + secondNumber + " is " + gcd(firstNumber, secondNumber));}public static int gcd(int m, int n) {int gcd = 1;if (m % n == 0) return n;for (int k = n / 2; k >= 1; k--) {if (m % k == 0 && n % k == 0) {gcd = k;break;}}return gcd;}
}
(4)欧几里得算法
package com.java;//程序清单22-4,欧几里得算法求最大公约数import java.util.Scanner;public class GCDEuclid {public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.println("Enter the first number: ");int firstNumber = input.nextInt();System.out.println("Enter the second number: ");int secondNumber = input.nextInt();System.out.println("The greatest common divisor for " + firstNumber + " and " + secondNumber + " is " + gcd(firstNumber, secondNumber));}public static int gcd(int m, int n) {if (m % n == 0)return n;elsereturn gcd(n, m % n);}
}
Java实现欧几里得法求最大公约数GCD相关推荐
- 欧几里得算法求最大公约数python,算法:欧几里得求最大公约数(python版)
#欧几里得求最大公约数 #!/usr/bin/env python #coding -*- utf:8 -*- #iteration def gcd(a,b): if b==0: return a e ...
- 欧几里得求最大公约数--JAVA递归实现
欧几里得算法求最大公约数算法思想: 求p和q的最大公约数,如果q=0,最大公约数就是p:否则,p除以q余数为r,p和q的最大公约数即q和r的最大公约数. java实现代码: 1 public clas ...
- 牛客网递归错题:递归、欧几里得求最大公约数的时间复杂度、线性递归与尾递归实例区别
很久找不到学习的平衡点,似乎有目的性的去解决问题寻求方法获得知识会比直接吸取知识要有趣,更印象深刻,这些都是我爬过的坑,以此铭记在心. 1. 队列在程序调用时必不可少,因此递归离不开队列.× 递归是栈 ...
- 扩展欧几里得求多组解CodeForces - 1244C
扩展欧几里得求多组解 扩展欧几里得可以求得满足ax+by = c的一组解(这里c%gcd(a,b)要等于0):假如求得的解为(x0 , y0),G = gcd(a , b),这时我们可以发现(x0 + ...
- 关于扩展欧几里得求最小正整数解
关于扩展欧几里得求最小正整数解 //扩展欧几里得算法求最小正整数解 这里讲的是欧几里得,不是那个洗澡测浮力的阿基米德 . 什么是欧几里得算法: 扩展欧几里得算法是用来求解一类特定的不定方程的,形如ax ...
- 扩展欧几里得求逆元实例
扩展欧几里得求逆元实例 首先说一下逆元的定义 存在一个数a使得ax对y进行取余运算,得到的值是1,则称a是x的逆元.在数学中记做:a * x = 1(mod p) 例如x = 4,y = 11,3x ...
- C语言求最大公约数GCD的算法(附完整源码)
C语言求最大公约数GCD的算法 C语言求最大公约数GCD的算法完整源码(定义,实现,main函数测试) C语言求最大公约数GCD的算法完整源码(定义,实现,main函数测试) #include < ...
- “景驰科技杯”2018年华南理工大学程序设计竞赛 H-对称与反对称(扩展欧几里得求逆元)
题目链接 题目描述: 给出一个N*N的方阵A.构造方阵B,C: 使得A = B + C.其中 B为对称矩阵,C为反对称矩阵. 对于方阵S中的任意元素,若(S)ij = (S)ji,则称S为对称矩阵 对 ...
- 记载_扩展欧几里得求模逆
n > a > 0 有a.n,存在x.y,使得当gcd(a,n)=1时,得到xa+yn=1 => (xa+yn)mod(n) = 1 因为(yn)mod(n)=0 整理的到 (xa) ...
最新文章
- win10下处理“xxx不是内部或外部命令,也不是可运行的程序或批处理文件”
- 使用Qt Assistant
- Python的虚拟环境配置(pyenv+virtualenv)
- 浮点数在计算机中存储方式float,double)---转
- 王思聪名下企业被拍卖1100万债权,此前还债20亿 网友:拍下等于“接盘侠”?...
- Centos7安装完毕后无法联网的解决方法(转)
- 翻译:包含列的索引:通往SQL Server索引级别5的阶梯
- 计算机基础知识精品课程,计算机应用基础精品课程课件第1课计算机基础知识第课计算机基础.PDF...
- Android开发时候,需要下载完全的GMS谷歌服务包
- html实现百度换肤,百度换肤
- Hello Ragel -- 生成状态机的神器
- 分享推荐国产串口PSRAM外扩芯片EMI7064LSME
- word文档中如何让正文分栏但是脚注不分栏
- VOIP信号传输过程
- 备考网规第一章非网络基础
- python-司机和售票员
- DataFrame.drop_duplicates操作中的inplace参数
- git点击pull后没有同步_关于git pull时出现的问题及解决反思
- 基于python的国内外研究现状怎么写_如何撰写国内外研究现状评述
- 加密算法、公钥、私钥、数字签名与CA
热门文章
- 基于python的npcap库与dpkt库实现抓包及存储
- 微信小程序使用MD5加密
- 初玩SM2259XT2+B27A自制固态开卡成功,SM2259XT2量产工具和SM2258XT类似
- 【Arcgis】绘制甘肃省行政区划地图
- 工具 | Codeblock下载与安装及使用
- 【WINDOWS / DOS 批处理】for命令详解(四)
- 顶级图片管理加工软件Picasa免费中文版
- 滑动窗口大小为什么不能是2的n次方大小
- NP完全问题与近似算法:贪婪策略|Python实现
- python 日历壁纸_winform壁纸工具:为图片添加当月的日历并设为壁纸 .