`

算法:质数因子

 
阅读更多

一.需求描述

   如:180 = 2 * 2 * 3 * 3 * 5, 则180 的质数因子就是 2 2 3 3 5

 

二.实现思路

 

  1. 180 = 2 * 90

  2. 180 = 2 * 2 * 45

  3. 180 = 2 * 2 * 3 * 15

  4. 180 = 2 * 2 * 3 * 3 * 5

  

  由于2, 3, 5 都是质数,所以结束.

 

三.代码实现(List)

 

   1. 将 180 放入 list, 此时list:[180];

   2. 遍历list,判断180不是质数,则计算他的因子,并且取代他,此时list:[2, 90];

   3. 遍历list,判断  90不是质数,则计算他的因子,并且取代他,此时list:[2, 2, 45];

   4. 遍历list,判断  45不是质数,则计算他的因子,并且取代他,此时list:[2, 2, 3, 15];

   5. 遍历list,判断  15不是质数,则计算他的因子,并且取代他,此时list:[2, 2, 3, 3, 5];

   6. 遍历list,此时都为质数,所以循环结束,此时的list元素即为最终结果.

 

四.代码

import java.util.ArrayList;
import java.util.List;

public class Demo {

    public static void main(String[] args) {

        List<Long> data = new ArrayList<Long>();

        data.add(180L);

        task(data);

        System.out.println("最终结果:" + data);
    }

    private static void task(List<Long> data) {

        System.out.println("过程结果:" + data);
        for (int i = 0; i < data.size(); i++) {

            long num = data.get(i);
            if (isZhishu(num)) {
                continue;
            }

            for (long j = 2; j < num; j++) {
                if (num % j == 0) {
                    data.remove(i--);
                    data.add(j);
                    data.add(num / j);
                    break;
                }
            }
            System.out.println("过程结果:" + data);
        }
    }

    private static boolean isZhishu(long num) {

        long sqrt = (long) Math.sqrt(num) + 1;

        for (int i = 2; i < sqrt; i++) {
            if (num % i == 0) {
                return false;
            }
        }
        return true;
    }
}

 

五.结果:

 

过程结果:[180]
过程结果:[2, 90]
过程结果:[2, 2, 45]
过程结果:[2, 2, 3, 15]
过程结果:[2, 2, 3, 3, 5]
最终结果:[2, 2, 3, 3, 5]

分享到:
评论

相关推荐

    算法:N百万内质数之和

    其核心思想是标记所有合数(即非质数),而非寻找质数的因子。具体步骤如下: 1. **创建列表**:创建一个从2到N的数字列表。 2. **查找下一个未标记的数**:找到列表中下一个未被标记的数p,这表示p是质数。 - ...

    python求素数因子-Python入门教程:素数判断与素因子分解.pdf

    在Python编程中,判断一个数是否为素数和进行素因子分解是常见的数学问题,尤其在初学者阶段。本文档提供了两种关键函数:`isprime` 和 `factor`,用于解决这些问题。 首先,`isprime` 函数用于检查一个整数 `num` ...

    ACM 比赛一些常用算法总结

    这里我们将深入探讨标题和描述中提到的五个关键算法:素数因子组合、字典树、树状数组、并查集以及最大匹配。这些算法在解决各种复杂问题时发挥着核心作用。 1. **素数因子组合**: - 素数是自然数中的基本构建块...

    非对称加密算法:RSA算法的C++实现与Java实现

    RSA(Rivest-Shamir-Adleman)算法是最早被广泛采用的非对称加密算法之一,其安全性基于大整数因子分解的困难性。本篇将深入探讨RSA算法的理论基础及其在C++和Java两种编程语言中的实现。 RSA算法的基本思想是基于...

    分治法:快速傅里叶变换算法.pdf

    2. 互质因子算法:基于中国剩余定理,适用于序列长度N与其因子互质的情况,无需旋转因子。 3. Rader-Brenner算法:采用纯虚数旋转因子,牺牲数值稳定性以减少乘法运算。 4. Split-Radix算法:改进的Cooley-Tukey算法...

    RSA算法:密钥生成、加密/解密和身份验证_MATLAB代码_下载

    RSA算法基于数论中的两个基本事实:大整数因子分解的困难性和欧拉函数的性质。算法主要包括以下步骤: 1. **密钥生成**: - 选择两个大素数p和q。 - 计算n=p*q,n是公钥和私钥的一部分。 - 计算φ(n)=(p-1)*(q-1...

    求质数的算法

    埃拉托斯特尼筛法是一种高效的找出所有小于给定上限n的质数的算法。基本步骤如下: - 初始化一个大小为n的布尔数组,所有元素初始化为true,表示它们可能是质数。 - 从2开始,将所有2的倍数标记为非质数(即数组...

    JAVA基础 第一篇:素数、合数、质数分解、最大公约数、最小公倍数.docx

    总之,理解并熟练掌握素数、合数、质数分解、最大公约数和最小公倍数的概念及计算方法,对Java程序员来说是至关重要的。这些基础知识不仅应用于初学者的练习,还常常出现在高级算法和数据结构中,是编程能力提升的...

    RSA公钥加密算法: 用于加密任何消息

    总的来说,RSA算法通过巧妙地利用数论原理,实现了安全的公钥加密,但其安全性依赖于大数因子分解的难度。随着量子计算的发展,RSA的安全性可能会受到挑战,因此持续研究和发展新的加密算法显得尤为重要。

    简易素数算法导出的经典素数算法

    这种方法的核心是只检查到√n范围内的素数因子。首先,需要一个已知的素数序列,然后对每个素数进行判断。这种方法的效率依赖于素数序列的构建,其时间复杂度为O(PI(√n)),其中PI(x)是不超过x的素数数量。根据素数...

    素数因子算法的FFT处理器的设计.pdf

    素数因子算法的FFT处理器的设计.pdf

    寻找正整数的素数因子的新算法 (2004年)

    本文介绍了一种用于寻找正整数素数因子的新算法,并对其进行了详细的分析。算法采用了基于分化地推扩充的主词变换规则循环不变式的新技术和软件转换工具,同时充分使用了数据抽象、功能抽象、软件重用、多态、类属和...

    无平方因子的判定与算法

    例如,10是无平方因子的,因为它只能被1和质数2、5整除;而12不是无平方因子的,因为它可以被4(即2的平方)整除。 #### 二、判定算法 最近的研究成果表明,存在一种高效的算法可以在多项式时间内判定一个给定的...

    概率算法求素数(c语言)

    - 素数检测的一个基本方法是从2到该数的平方根进行检查,如果在此范围内找不到任何因子,则该数为素数。 #### 实验代码分析 ```c #include #include #include #include #include int main() { int a[100],...

    素数定义 素数判定证明 素数求解算法

    - 使用已知的素数列表进行测试,只检查列表中的素数作为可能的因子。 - 代码示例(C语言): ```c bool IsPrime2(unsigned n) { if (n ) { throw 0; } static unsigned aPrimeList[] = { /* 已知素数列表 */...

    逐步修改素数高效算法

    此外,可以使用质数表提前排除已知非素数。 2. **动态调整步长**:根据数的大小动态调整试除因子的步长,避免不必要的计算,如跳过所有已知的合数。 3. **使用素数筛法**:结合埃拉托斯特尼筛法的思想,预先筛选出...

    2020-06-06 计算机代数系统.docx

    3. Fermat算法:基于Fermat小定理,用于素性测试,是早期的质数判定方法之一。 4. Euler算法:Euler方法在数值分析中用于求解常微分方程,它是一种初值问题的近似解法。 5. Rabin-Miller素性检验:这是一种概率性...

    算法大全代码

    算法大全涵盖了广泛的计算问题解决方案,包括数论算法和图论算法等核心概念。这些算法是计算机科学的基础,广泛应用于软件开发、数据处理和优化问题。 一、数论算法 1. 最大公约数(Greatest Common Divisor, GCD...

    Miller算法-素数生成的概率性检验算法

    在Miller算法中,我们对n=2^t*m+1(其中m是n-1的最大奇因子)进行检验,尝试找到一个整数a使得a^(n-1) ≠ 1 (mod n),这将证明n不是素数。 **算法流程:** 1. 初始化pass变量为0。 2. 从10^l到10^l+1的范围内随机...

    对质数进行枚举,这是算法类问题的解答

    **质数枚举**是指通过一定的算法找出一定范围内的所有质数。常见的质数枚举算法包括埃拉托斯特尼筛法(Sieve of Eratosthenes)、线性筛等。 ### 2. 埃拉托斯特尼筛法简介 **埃拉托斯特尼筛法**是一种用于查找小于...

Global site tag (gtag.js) - Google Analytics