java常见面试题2:求出两个正整数的最大公约数
概念:
最大公约数:两个整数共有因子中最大的一个
方法一:
如果两个数相等,则最大公约数为它本身,两个数不等,则用两个数依次除 两个数中最小的一个到 1,直到找到同时能被两个数除尽的那个数
代码清单:
public static int gcd1(int x, int y) {
int result = 0; // 最大公约数
int min = x > y ? y : x; // 两个整数中最小的数
if (x == y) {
result = x;
} else {
for (int i = min; i >= 1; i--) {
if (x % i == 0 && y % i == 0) {
result = i;
break;
}
}
}
return result;
}
方法二:辗转相除法
假设用f(x,y) 表示x , y 的最大公约数,取 k = x/y , b = x%y ,则 x = ky + b ,如果一个数能够同时整除 x 和 y ,则 x 和 y 的公约数与 b 和 y 的公约数是相同的,其最大公约数也是相同的,则有 f(x,y) = f(y , x%y) (x>=y>0)。如此便可把原问题转化为求两个更小数的最大公约数,知道其中的一个数为0,剩下的另外一个数就是两者的最大公约数。
示例如下:
F(42,30) = F(30,12) = F(12,6) = F(6, 0) = 6
代码清单:
public static int gcd2(int x, int y) {
return (y == 0) ? x : gcd(y, x % y);
}
方法三:
方法二中用到了取模运算。但对于大整数而言,取模运算(用到除法)是非常昂贵的开销。能不能不用取模式运算呢?
采用类似辗转相除法的分析,如果一个数能同时整除x和y ,则必能同时整除x-y和y
即x 和 y 的公约数和 x - y 和 y的公约数是相同的,其最大公约数也是相同的。即
F(x , y) = F (x-y , y)
示例如下:
F(42,30) = F(30,12) = F(12,18) = F(18, 12)= F( 12 ,6 ) = F( 6, 6) = F( 6, 0) = 6
代码清单:
public int gcd3(int x, int y) {
if (x < y) {
return gcd3(y, x);
}
if (y == 0) {
return x;
} else {
return gcd3(y, x-y);
}
}
java常见面试题2:求出两个正整数的最大公约数的更多相关文章
- java常见面试题及答案
java常见面试题及答案 来源 https://blog.csdn.net/hsk256/article/details/49052293 来源 https://blog.csdn.net/hsk25 ...
- java常见面试题及答案 1-10(基础篇)
java常见面试题及答案 1.什么是Java虚拟机?为什么Java被称作是"平台无关的编程语言"? Java 虚拟机是一个可以执行 Java 字节码的虚拟机进程.Java 源文件被 ...
- Java 常见面试题(一)
1)什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? Java虚拟机是一个可以执行Java字节码的虚拟机进程.Java源文件被编译成能被Java虚拟机执行的字节码文件.Java被设 ...
- 【转载】JAVA常见面试题及解答(精华)
JAVA常见面试题及解答(精华) 1)transient和volatile是java关键字吗?(瞬联) 如果用transient声明一个实例变量,当对象存储时,它的值不需要维持.例如: ...
- JAVA常见面试题问题简述(持续更新中)
JAVA常见面试题问题简述 1. springcloud和dubbo的区别 ①相比之下springcloud 的社区会更加活跃,解决问题的速度也会越来越快,dubbo相对来说如果碰到没有解决的问题,就 ...
- java常见面试题总结2
JAVA必背面试题和项目面试通关要点 简单来讲,equals方法主要是用来判断从表面上看或者从内容上看,2个对象是不是相等. 一 数据库 1.常问数据库查询.修改(SQL查询包含筛选查询.聚合查询和链 ...
- Java常见面试题-1
问: 1 面向对象的特征有哪些方面? 2 访问修饰符public,private,protected,以及不写(默认)时的区别? 3 String 是最基本的数据类型吗? 对象类型 基本类型 4 ...
- Android开发,java开发程序员常见面试题,求100-200之间的质数,java逻辑代码
public class aa{ public static void main (String args []){ //author:qq986945193 for (int i = 100;i&l ...
- 每天写两个的java常见面试题—final 和static 的用法
第一次写随笔,可能写的比较乱,更多的是作为自己记忆一些知识的方式.所有记录的东西都是自己的一些理解,很多语言可能还是从其他大牛的博客里面搬过来的. 一.static的作用: static的的作用从三个 ...
随机推荐
- select函数详细用法解析
1.表头文件 #include #include #include 2.函数原型 int select(int n,fd_set * readfds,fd_set * writefds,fd_set ...
- js camelCase formatter
js camelCase formatter 驼峰命名 转换器 'A'.charCodeAt(); // 65 'Z'.charCodeAt(); // 90 'a'.charCodeAt(); // ...
- npm 安装 electron 失败的解决方案
npm 安装 electron 失败的解决方案 shit GFW npm 安装 electron 失败 解决方案 https://www.npmjs.com/package/nrm $ nrm ls ...
- github & markdown & image layout
github & markdown & image layout css & right https://github.com/sindresorhus/log-symbols ...
- 解析js字符串
myEval export const evalExp = /[!\&\|\+\-\*\%=\/<\>\^\(\)\~\:\?\;]/g; export function myEv ...
- 与程序员相关的CPU缓存知识
本文转载自与程序员相关的CPU缓存知识 基础知识 首先,我们都知道现在的CPU多核技术,都会有几级缓存,老的CPU会有两级内存(L1和L2),新的CPU会有三级内存(L1,L2,L3 ),如下图所示: ...
- 为什么Linux默认页大小是4KB
本文转载自为什么 Linux 默认页大小是 4KB 导语 我们都知道 Linux 会以页为单位管理内存,无论是将磁盘中的数据加载到内存中,还是将内存中的数据写回磁盘,操作系统都会以页面为单位进行操作, ...
- IdentityServer4之持久化很顺手的事
前言 原计划打算在春节期间多分享几篇技术文章的,但到最后一篇也没出,偷懒了吗?算是吧,过程是这样的:每次拿出电脑,在孩姥姥家的院子总有阳光沐浴,看不清屏幕,回屋又有点冷(在强行找理由),于是又带着娃遛 ...
- 微信小程序:如何删除所有的console.log?
使用vscode正则匹配,手动去除 1.用vscode打开微信小程序项目 2.Edit-----replace in Files 1. console.log()加了分号 console\.log\( ...
- 用量子计算模拟器ProjectQ生成随机数,并用pytest进行单元测试与覆盖率测试
技术背景 本文中主要包含有三个领域的知识点:随机数的应用.量子计算模拟产生随机数与基于pytest框架的单元测试与覆盖率测试,这里先简单分别介绍一下背景知识. 随机数的应用 在上一篇介绍量子态模拟采样 ...