任一整数素数乘积分解练习
1.概述
1.1 PrimeDecision
1.1.1 素数判断
/**
* 素数判断
*
* @param n
* @return
/
private boolean isPrime(int n) {
for (int i = 2; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
1.1.2 素数分解
/*
* 数值进行素数分解
*
* @param n
*/
public void decomposeNumber(int n) {
if (isPrime(n)) { // 不用分解
list.add(n);
list.add(1);
} else {
//decomposeNumberDetail(n, (int) Math.sqrt(n)); // sqrt分解(乱序)
decomposeNumberDetail(n, (int) Math.sqrt(n)+1); // sqrt分解(降序)
}
}
1.1.3 子数分级
/**
* 子素数分解
* @param n
* @param div sqrt后的数值
*/
private void decomposeNumberDetail(int n, int div) {
if (div < 1) {
return;
}
if (isPrime(div) && n % div == 0) { // div复合素数要求
list.add(div);
decomposeNumber(n / div); // 分解剩余数值
} else {
decomposeNumberDetail(n, div - 1); // div不符合素数要求,区下一个
}
}
1.2 完整代码
package com.example.demo;
import java.util.ArrayList;
import java.util.List;
/**
-
@author kikop
-
@version 1.0
-
@project Name: mycustomioc
-
@file Name: PrimeDecisionTest
-
@desc 功能描述
-
@date 2019/10/17
-
@time 7:08
-
@by IDE: IntelliJ IDEA
*/
public class PrimeDecision {private List<Integer> list = new ArrayList<Integer>();
/**
- 素数判断
- @param n
- @return
*/
private boolean isPrime(int n) {
for (int i = 2; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
/**
- 子素数分解
- @param n
- @param div sqrt后的数值
*/
private void decomposeNumberDetail(int n, int div) {
if (div < 1) {
return;
}
if (isPrime(div) && n % div == 0) { // div复合素数要求
list.add(div);
decomposeNumber(n / div); // 分解剩余数值
} else {
decomposeNumberDetail(n, div - 1); // div不符合素数要求,区下一个
}
}
/**
-
数值进行素数分解
-
@param n
*/
public void decomposeNumber(int n) {if (isPrime(n)) { // 不用分解
list.add(n);
list.add(1);
} else {
//decomposeNumberDetail(n, (int) Math.sqrt(n)); // sqrt分解(乱序)
decomposeNumberDetail(n, (int) Math.sqrt(n)+1); // sqrt分解(降序)
}
}
public void display() {
list.forEach((obj) -> System.out.println(String.format("%d * ", obj)));
}
}
1.3 测试
package com.example.demo;
/**
-
@author kikop
-
@version 1.0
-
@project Name: mycustomioc
-
@file Name: PrimeDecisionTest
-
@desc 功能描述
-
@date 2019/10/17
-
@time 7:08
-
@by IDE: IntelliJ IDEA
*/
public class PrimeDecisionTest {public static void main(String[] args) {
PrimeDecision primeDecision = new PrimeDecision();
primeDecision.decomposeNumber(100);
primeDecision.display();
}
}
网友评论