(java) 将一个自然数分解成几个质数的连乘积形式 举例 input:60 output:2*2*3*5

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(java) 将一个自然数分解成几个质数的连乘积形式 举例 input:60 output:2*2*3*5相关的知识,希望对你有一定的参考价值。

简单写一个方法

返回一个装了质因数的ArrayList

希望对楼主有所帮助,望采纳!

刚刚测了一下,有点错误,看来空手写还是容易出错啊。

给一个完整的

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

public class Test

public static void main(String args[])

List<Integer> output = resolvePrime(60);
for (int i = 0 ; i < output.size() - 1; i++)
System.out.print(output.get(i) + " * ");

System.out.print(output.get(output.size() - 1));


public static List<Integer> resolvePrime(int input)
List<Integer> output = new ArrayList<Integer>();
int currentPrime = 2; // 当前所除质数

while (input != 1)
// 能整除当前质数,则在List中压入一次当前质数,并且更新input的值
if (input % currentPrime == 0)
output.add(currentPrime);
input /= currentPrime;


// 若不能整除, 检查下一个质数
else
for (int i = currentPrime + 1; i <= input; i++)
boolean isPrime = true;

for (int j = 2; j < i / 2; j++)
if (i % j == 0)
isPrime = false;break;


if (isPrime)
currentPrime = i;break;





return output;

参考技术A package com.bankcomm.test;
import java.util.ArrayList;
import java.util.List;
public class Test1

public void print(List<Integer> list)
String s = "" ;
for(int i : list)
s += i + "*" ;

//去掉最后一个“*”号
s = s.substring(0, s.length()-1);
System.out.println(s);


public List<Integer> getNum(int n)
//list来存放质因数
List<Integer> list = new ArrayList<Integer>();
//
int num = n ;

for(int i = 1 ;num > 1 && i <= Math.sqrt(num) ; )
if(i < 2)
//最小的质数2
if(num%2 == 0 )
list.add(2);
num /= 2 ;
continue;

else if(i < 3)
//如果是3
if(num%3 == 0)
list.add(3);
num /= 3 ;
continue;

else
//其他的
if(num % i == 0)
list.add(i);
num /= i ;
continue;


i += 2 ;

if(num != 1)
list.add(num) ;

return list ;

public static void main(String[] args)
Test1 test = new Test1() ;
test.print(test.getNum(3456789));



这个算法是我原创的哦。时间复杂度最差应该是 O(sqrt(n)) 。居然不用判断用来做除数的是不是质数,O(∩_∩)O哈哈~

codevs 1792 分解质因数

1792 分解质因数

 
题目描述 Description

编写一个把整数N分解为质因数乘积的程序。

输入描述 Input Description

输入一个整数 N

输出描述 Output Description

输出 分解质因数 。拆成几个质数相乘的形式,质数必须从小到大相乘

样例输入 Sample Input

756

样例输出 Sample Output

756=2*2*3*3*3*7

#include<cstdio>
#include<cmath>
#include<string>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;

int tot;
int i,m=2;
int a,b;

int main()
{
    int n;
    scanf("%d",&n);
    i=n;
    a=i;
    printf("%d=",i);
    while(i!=1)
    {
        if(i%m!=0)
            m++;
        else
        {
            if(a==i)
                printf("%d",m);
            else    printf("*%d",m); 
            i/=m;
        }
    }//巧妙的部分o(∩_∩)o
  //printf("\b");

   return 0;
}

自我感觉思路巧妙o(∩_∩)o


以上是关于(java) 将一个自然数分解成几个质数的连乘积形式 举例 input:60 output:2*2*3*5的主要内容,如果未能解决你的问题,请参考以下文章

怎么把一个矩阵分解成几个矩阵

求把某数分拆成几个自然数的和,求这些数的最大乘积的公式

codevs 1792 分解质因数

codevs1792 分解质因数

质因数分解

算数基本定理约数定理