`
zyn010101
  • 浏览: 325086 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一个整数的所有最小因子

 
阅读更多
   要求:用户输入一个正整数,然后以降序显示它的所有最小因子,例如:120,那么显示的最小因子为5,3,2,2,2。存储这些素数(例如:2,2,2,3,5)获取这些按倒序显示这些因子。

package com.zyn.iteye;

import java.util.ArrayList;
import java.util.List;

public class StackOfIntegers {
	//存放分解的素数
	List<Integer> list = new ArrayList<Integer>();
	
	//主方法,求分解素数
	public void getSub(int sum){
		//获取中间数的后一个数,保证中间数可以在下面的for中被循环
		int middle = getMiddleAfter(sum);
		//2是最小的素数,从2开始循环除
		for(int i=2;i<middle;i++){
			//如果i不为素数,直接跳过,循环下个数
			if(!isSuShu(i)){
				continue;
			}
			//余数
			int yu = sum%i;
			//商
			int last = sum/i;
			if(yu==0){
				//余数为0,i为sum的因子,填入list
				list.add(i);
				//如果商为素数,则添加商到list,程序结束
				if(isSuShu(last)){
					list.add(last);
					return;
				}
				//如果商不为素数,递归商调用本方法,分解商
				getSub(sum/i);
				//如果sum可以被素数因子整除,直接分解商,后续的因子不必再循环
				break;
			}
		}
	}
	
	//如果可以被2整除,则+1,否则+1后再除以2
	public int getMiddleAfter(int num){
		if(num%2==0){
			return num/2+1;
		}else{
			return (num+1)/2;
		}
	}
	
	//判断是否是素数
	public boolean isSuShu(int num){
		boolean flag = true;
		for(int i=2;i<num;i++){
			if(num%i==0){
				flag = false;
				break;
			}
		}
		return flag;
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		StackOfIntegers s = new StackOfIntegers();
		s.getSub(120);
		System.out.println(s.list);
	}

}

0
1
分享到:
评论
1 楼 ajax忘了跳转 2019-01-24  
谢谢分享,基于你的思路。我改良了一版,可供参考
public static List yins(int num){
        List<Integer> list = new ArrayList<>();
        for (int i = 2; i <= num; i++) {
            if (num % i != 0) {
                continue;
            }else{
               if(num >= 2){
                   list.add(i);
                   num = num / i;
                   i = 1;
               }
            }
        }
        return list;
    }

  public static void main(String[] args) { 
        System.out.println("120的因数为:"+ String.valueOf(yins(120)));
    } 

相关推荐

    java求一个整数的因子.rar

    通过这样的程序,我们不仅可以找出一个整数的因子,还可以将其存储起来用于进一步的分析,比如计算最大因子、最小因子、平均因子等。在实际的编程项目中,可能还会涉及到多线程、并行计算等更复杂的技术来优化这个...

    C#实现输入一个任意整数分解质因子

    当输入一个正整数时,程序会输出其所有的质因子。 这个简单的C#实现可以作为学习和理解质因子分解的基础。在实际应用中,我们可以优化这个过程,比如使用更高效的质数检测算法,或者对大整数进行优化处理,以适应...

    对含有整数最小素因子的倒数的某些和的估计 (2000年)

    对于一个大于1的整数n,最小素因子是指能整除n的最小素数,而最大素因子则是指n的所有素因子中最大的那个。如果n=1,则通常规定最小素因子为无穷大,最大素因子为1,这主要是为了方便分析递推关系。 在文章中,作者...

    JAVA中判断一个整数是否为质数

    在Java编程语言中,判断一个整数是否为质数是一个常见的数学问题,也是计算机科学基础课程中的典型示例。质数定义为只能被1和它本身整除的大于1的自然数,例如2、3、5、7、11等。在实际应用中,检查一个数是否为质数...

    文档博客1.docx

    1. **函数`factorSum`**:该函数接收一个整数作为参数,返回该整数的所有真因子之和。函数使用了一个简单的循环结构,遍历所有可能的因子,并累加那些能够整除给定整数的因子。 2. **主函数`main`**:首先定义了一...

    蓝桥杯c++-蓝桥杯竞赛练习之算法提高题计算整数因子.zip

    对于一个整数n,如果存在另一个整数m,使得n能被m整除,即n/m无余数,那么m就是n的因子。例如,6的因子有1、2、3和6。计算整数因子通常用于解决与数论相关的竞赛问题,比如找出所有因子、计算最大公约数(GCD)或...

    整数划分问题 将正整数n表示成一系列正整数之和:n=n1+n2+…+nk,其中n1≥n2≥…≥nk≥1,k≥1。

    在本问题中,我们需要找到一个正整数\( n \)的所有可能的划分方式,并计算出这些划分的数量。具体来说,对于一个正整数\( n \),其划分可以表示为: \[ n = n_1 + n_2 + \ldots + n_k \] 其中满足\( n_1 \geq n_2 \...

    C#判断一个正整数是否为素数

    通过理解素数的概念以及如何在C#中实现素数判断,我们可以轻松地解决与素数相关的编程问题,比如找出一个范围内的所有素数,或者检查一个特定的数是否为素数。这样的功能在加密算法、数据结构和算法分析等许多IT领域...

    素因子分解,递归,c实现

    具体来说,程序首先读取用户输入的一个或多个正整数,然后利用递归函数`search()`来找出这些数字的所有素因子,并以指数形式输出结果。 #### 2. C语言基础 - **变量声明**: 在`main()`函数中,声明了一个整型变量`N...

    将一个正整数分解质因数.docx

    总结来说,质因数分解是将正整数表示为质数乘积的过程,而这个Java程序提供了一个基本的实现方法,通过递归地检查每个质数(从2开始)来找到所有因子。虽然它不是最优化的解决方案,但对于理解质因数分解的概念和...

    C++初学者之根据输入的任何一个正整数,输出可能被表示的连续正整数

    请编写程序,根据输入的任何一个正整数,找出符合这种要求的所有连续正整数序列。 输入数据:一个正整数,以命令行参数的形式提供给程序。 输出数据:在标准输出上打印出符合题目描述的全部正整数序列,每行一个...

    基于混合整数线性规划的电力系统机组组合优化

    在这个案例中,可能使用了Cplex作为求解器,Cplex是IBM开发的一个高效优化求解器,尤其擅长处理大规模的线性和混合整数优化问题。 Cplex通过先进的算法,如分支定界法和割平面法,能够在保证全局最优解的情况下快速...

    输入两个正整数m和n求其最大公约数和最小公倍数.docx

    - 创建一个映射表,将1-7对应的英文单词输出。 34. 计算表达式: - 接受两个整数和运算符,根据运算符进行相应的计算。 35. 闰年判断: - 根据闰年的定义(能被4整除且不能被100整除,或者能被400整除)判断2...

    最小公倍数 最大公约数_最小公倍数_最大公约数_

    LCM和GCD之间存在一个关系:对于任何两个正整数a和b,它们的乘积等于两者的最大公约数与最小公倍数的乘积,即`a * b = GCD(a, b) * LCM(a, b)`。求解LCM通常可以通过已知的GCD来计算,或者直接列举出所有可能的倍数...

    关于Smarandache因子个数为n的最小数问题 (2012年)

    其中,d(n)是Dirichlet除数函数,它返回一个数n的所有正因子(包括1和n本身)的个数。因此,Tn是满足其因子个数等于n的所有正整数中的最小值。例如,T1=1,因为1只有一个因子1;T2=2,因为2有两个因子1和2。 文章...

    C语言编程实现求两个数的最大公约数和最小公倍数

    解题思路:最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个;最小公倍数是指两个或多个整数公有的倍数叫做它们的公倍数,其中除0以外最小的一个公倍数就叫做这几个整数的最小公倍数...

    PTA-公因数与公约数

    最大公因数(Greatest Common Divisor,简称GCD),也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。整数m和n的最大公约数记为GCD(m, n)。 最小公倍数(Least Common Multiple,简称LCM)是指两个...

    基本数的操作_基本整数的操作_

    设计整数处理程序题目要求:一、编写功能函数(1)求n!(2)求m的反序数。(3)判断m是否是素数。(4)判断m是否是完数,若是完数则输出其所有的因子。二、输入两个正整数m、n,完成如下功能:(根据题目要求调用...

    求最大公约数最小公倍数的java程序类的继承.doc

    在这个实验中,我们将编写一个Parent类,包含一个计算最大公约数的方法f(int a, int b),然后编写一个Child类,继承自Parent类,并重写方法f(int a, int b),使其返回两个整数的最小公倍数。 一、Java中的类继承...

    JAVA基础 第一篇:素数、合数、质数分解、最大公约数、最小公倍数.docx

    为了实现质数分解,我们可以先判断一个数是否为质数,如果不是,我们可以通过分解其因子,不断找出质数并记录,直到所有因子都是质数为止。 最大公约数(Greatest Common Divisor, GCD)和最小公倍数(Least Common...

Global site tag (gtag.js) - Google Analytics