`
zyn010101
  • 浏览: 320102 次
  • 性别: 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)));
    } 

相关推荐

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

    设p(n)表示整数n&gt;1的最小素因子.本文得到了∑f(n),p(n)uo的渐近式,此处f(n)是一类数论函数。

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

    Description ...第一行是一个整数n,表示有n个测试用例; 第2至n+1每行一个正整数。 Output 对应每组输入,输出正整数n的不同划分个数。 Sample Input 2 5 6 Sample Output 7 11

    文档博客1.docx

    关于信息学奥赛一本通网站上的1154题:亲和数:自然数a的因子是指能整除a的所有自然数,但不含a本身。例如12的因子为:1,2,3,4,6。若自然数a的因子之和为b,而且b的因子之和又等于a,则称a,b为一对“亲和数” 。求...

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

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

    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经典编程题(附答案)

    题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程 找出1000以内的所有完 数。 【程序10】 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次...

    c程序设计习题参考(谭浩强三版)习题参考解答

    10.3输入10个整数,将其中最小的数与第一个数对换,把最大的一个数与最后一个对换。写3个函数:(1)输入10个数;(2)进行处理;(3)输出10个数。 74 10.4有n个整数,使其前面各数顺序向后移m个位置,最后m个数...

    求第1500个只有2,3,5因子的数

    设计一个队列用来存放1500个只有2,3,5因子的数 将第一个数送人队列中,即queen[0]=1; 设置三个指针p2 p3 p4开始指向queen[0] 找出p2,p3,p5所指向的数分别于2,3,5相乘后的最小值 2*queen[p2],3*queen[p3],5*queen[p5...

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

    ∨n∈N+,Smarandache因子个数为n的最小数Tn定义为最小的正整数k,使得d(k) = n. 即Tn = min{k:k∈N,d(k) = n},其中d(n)为Dirichlet除数函数.利用初等方法以及素数的分布性质研究ln(Tn)在Smarandache简单数列上的均值...

    伦斯特拉椭圆曲线因式分解或椭圆曲线因式分解方法(ECM)

    目前,它仍然是不超过50至60 位数的除数的最佳算法,因为其运行时间由最小因子p的大小决定,而不是由要被考虑的数n的大小决定。通常,ECM用于从具有许多因素的非常大的整数中去除小因素; 如果剩余的整数仍然是复合的...

    java 经典习题.doc

    题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程 找出1000以内的所有完数。 【程序10】 题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次...

    java经典编程题

    1.输出所有的“水仙花数”,水仙花数是指一个三位数,这个数的各位数字的立方和就是该数本身。 2.将一个正整数分解质因数,如:18=2*3*3;...24.如果一个数恰好等于它的因子之和,则叫“完数”求1000以内所有完数;

    相对因子宽度与可S-因子分解矩阵 (2007年)

    对于一个实对称矩阵A,如果存在一个最小正整数k以及实矩阵(长方形)V,使得A= VVT,且V的每一列至多只有k个非零元素,则称A的因子宽度为k.利用可S-因子分解矩阵的S-秩以及因子宽度,引入相对因子宽度的定义,给出了...

    2级Java考试题上机【浙江】

    1.3 求一个最小正整数 1.4 输入一个固定电话号码,判断是杭州地区还是非杭州地区 1.5 将1!+2!+…+10!的和 1.6 调用函数f,输出n的所有质数因子 1.7 改方法返回个位数为6,并且能被3整除的4位数的个数 1.8 对x=1,...

    C语言经典实例 经典c程序100例

    题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程  找出1000以内的所有完数。 1. 程序分析:请参照程序上页程序14. 2.程序源代码: 【程序37】 题目:对10个数进行排序 1.程序...

    蓝桥杯 python 组题目和解析.docx

    题目描述:给定一个正整数 n,求其所有由两个素数组成的数 的和。 解析:先判断一个数是否为素数,即判断从 2 到该数-1 之间是 否存在该数的因子。然后,用两个循环枚举所有的两个素数,计算 它们的和。 2. 特别数列...

    基于python实现的数学建模相关代码,包含回归、分类、差分、聚类、时间序列分析、因子分析等

    基于python实现的数学建模相关代码,包含回归、分类、差分、聚类、时间序列分析、因子分析等 01 基于cvxpy、scipy的线性规划 02 整数规划 03 基于cvxpy、scipy的非线性规划 05 基于networkx实现的一系列图算法和...

    StackOfIntegers类

    设计一个程序,它接受一个正整数,降序输出其所有最小素数因子。例如,如果整数是120,则输出5、3、2、2、2。使用StackOfIntegers类保存因子(如2、2、2、3、5),并利用它逆序获取和输出因子。

Global site tag (gtag.js) - Google Analytics