**刚看到群里有个人提问 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,就当随手笔记了...
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于