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的的作用从三个 ...
随机推荐
- python之字符串方法upper/lower
1.描述: upper():用于将字符串全部转换为大写字母 lower():用于将字符串全部转换为小写字母 2.语法 str.upper() str.lower() 3.返回值 upper()或low ...
- 解决关闭ssh后网页停止服务的方法,利用nohup
上一篇文章提到宝塔面板无法运行,只能用ssh运行app.py. 关闭ssh时,app.py会被杀死.因为app.py的父进程就是ssh,关掉ssh会造成进程被杀死. 解决方法参考 https://w ...
- Keras读取保存的模型时, 产生错误[ValueError: Unknown activation function:relu6]
Solution: from keras.utils.generic_utils import CustomObjectScope with CustomObjectScope({'relu6': k ...
- ReactDOM API All In One
ReactDOM API All In One React DOM API render() hydrate() unmountComponentAtNode() findDOMNode() crea ...
- Upcoming Browser Behavior Changes & Chrome & SameSite
Upcoming Browser Behavior Changes & Chrome & SameSite Chrome 80 https://auth0.com/blog/brows ...
- 找出 int 数组的平衡点 & 二叉树 / 平衡二叉树 / 满二叉树 / 完全二叉树 / 二叉查找树
找出 int 数组的平衡点 左右两边和相等, 若存在返回平衡点的值(可能由多个); 若不存在返回 -1; ``java int [] arr = {2,3,4,2,4}; ```js const ar ...
- project generators & project scaffold
project generators & project scaffold how to write a node cli & Project Scaffold https://www ...
- node.js 如何处理一个很大的文件
node.js 如何处理一个很大的文件 思路 arraybuffer 数据分段 时间分片 多线程 web workers sevice workers node.js 如何处理一个很大的文件 http ...
- asm align 对齐数据
最大成员dword data: dd 1 db 2 align 4 dw 3 000E0010 - 01 00 00 00 000E0014 - 02 00 00 00 000E0018 - 03 0 ...
- C++算法代码——奖学金
题目来自:http://218.5.5.242:9018/JudgeOnline/problem.php?id=1098 题目描述 某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学 ...