(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的主要内容,如果未能解决你的问题,请参考以下文章