美文网首页
2019-10-17_任一整数素数乘积分解练习

2019-10-17_任一整数素数乘积分解练习

作者: kikop | 来源:发表于2019-10-17 16:57 被阅读0次

任一整数素数乘积分解练习
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();
    }
    }

相关文章

网友评论

      本文标题:2019-10-17_任一整数素数乘积分解练习

      本文链接:https://www.haomeiwen.com/subject/rzrvmctx.html