美文网首页
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