**刚看到群里有个人提问 100 如何分解为 2*2*5*5 的形式...于是随手丢了一个 demo 出来 **
直接上源码,过程详见注释:
@Test
public void test() {
//原始数据
int source = 100;
//质因数合集
List list = new ArrayList<>();
//分解质因数
memeda(list, source);
//输出质因数合剂
System.out.println(list);
//还原质因数乘积
int target = list.stream().reduce((t, i) -> t * i).get();
//验证结论
Assert.assertEquals(source, target);
}
public static void memeda(List children, int source) {
if (source > 1) {
children.add(
Optional.ofNullable(
IntStream.range(2, source)
.filter(i -> source % i == 0)
.findFirst()
).get().orElse(source)
);
memeda(children, source / children.get(children.size() - 1));
}
}
输出内容为:
[2, 2, 5, 5]
1 test passed
本例使用 java8 的 stream api,就当随手笔记了...
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于