递归求最大素因数(java)

简介: 可能经常进群会问这个群号的最大素因数是多少,或者算法题中也会遇到。今天就写一下求最大质因数的模板。

前言



可能经常进群会问这个群号的最大素因数是多少,或者算法题中也会遇到。今天就写一下求最大质因数的模板。


分析



首先分析,怎么求一个数的最大素因数。首先,我们以前求过最大因数,求最大因数的最暴力为2—n-1暴力查找 ,但是这样太超时了,后来发现在根号n前或者后某个区域查找就行了。因为找某个因数时候。n=a* b;a<=根号n;b>=根号n;所以只需查找到最小的因数就可以通过除法找到最大的因数。这只是查找因数的一个思路。


至于什么是素因数呢。那么这个数肯定满足两个条件:1为质数。2为n的因数。那么我们如何从众多n的因数中找到最大的那个素因数呢?


举个例子


  • 对于8=2 * 4=2*(2*2);那么8的最大素因数是2;
  • 对于20=2 * 10=2*(2*5)那么20的最大素因数是5;


可以发现这个查找就是一个递归的过程。对于某个n,查找的最大素因数就是他的最大因数和最小因数的两个数的最大质因数。在往下调用的过程中,如果某个数是质数那么就不进行往下递归,(当然也可以进行剪枝优化,比如设置一个参数为已经找到素因数的最大值,当数值小于这个数就不进行递归减小程序的运算量,但是一般主要的循环到根号n不会超时)


下面附上代码:



private static int getmax(int a) {
  for(int i=2;i*i<a+1;i++)
  {
    if(a%i==0)
    {
        return getmax(a/i)>getmax(i)?getmax(a/i):getmax(i);
    } 
  }
    return a;// 如果找不到因数他自己就是最大素因数
  }


目录
相关文章
|
4月前
|
Java
java基础(11)函数重载以及函数递归求和
Java支持函数重载,即在同一个类中可以声明多个同名方法,只要它们的参数类型和个数不同。函数重载与修饰符、返回值无关,但与参数的类型、个数、顺序有关。此外,文中还展示了如何使用递归方法`sum`来计算两个数之间的和,递归的终止条件是当第一个参数大于第二个参数时。
36 1
java基础(11)函数重载以及函数递归求和
|
6月前
|
算法 Java
java使用递归及迭代方式实现前序遍历 中序遍历 后序遍历 以及实现层序遍历
java使用递归及迭代方式实现前序遍历 中序遍历 后序遍历 以及实现层序遍历
91 7
|
7月前
|
Java
蓝桥杯Java组暴力递归搜图
蓝桥杯Java组暴力递归搜图
37 4
|
7月前
|
Java
java实现斐波那契数列(递归、迭代、流)
java实现斐波那契数列(递归、迭代、流)
|
7月前
|
算法 前端开发 Java
探讨Java中递归构建树形结构的算法
探讨Java中递归构建树形结构的算法
105 1
|
7月前
|
存储 Java
Java基础手册(标识符 关键字 字面值 变量 数据类型 字符编码 运算符 控制语句 方法及方法重载和递归 面向对象与面向过程)
Java基础手册(标识符 关键字 字面值 变量 数据类型 字符编码 运算符 控制语句 方法及方法重载和递归 面向对象与面向过程)
46 0
|
7月前
|
Java 大数据 程序员
老程序员分享:java递归
老程序员分享:java递归
30 0
|
7月前
|
Java
二分查找-递归(java)
二分查找-递归(java)
|
7月前
|
Java
java使用递归遍历文件目录
java使用递归遍历文件目录
|
7月前
|
Java
杭电acm2018 母牛的故事 Java解法 经典递归
杭电acm2018 母牛的故事 Java解法 经典递归
34 0