当前位置: 首页 > 面试题库 >

Java素数分解程序

巢靖
2023-03-14
问题内容

我正在研究用Java实现的素数分解程序。目的是找到最大的素因600851475143(项目Euler问题3)。我想我已经完成了大部分工作,但是却遇到了一些错误。而且我的逻辑似乎不对,特别是我为检查数字是否为质数而设置的方法。

public class PrimeFactor {

    public static void main(String[] args) {
        int count = 0;
        for (int i = 0; i < Math.sqrt(600851475143L); i++) {
            if (Prime(i) && i % Math.sqrt(600851475143L) == 0) {
                count = i;
                System.out.println(count);
            }
        }
    }

    public static boolean Prime(int n) {
        boolean isPrime = false;
        // A number is prime iff it is divisible by 1 and itself only
        if (n % n == 0 && n % 1 == 0) {
            isPrime = true;
        }
        return isPrime;
    }
}

编辑

public class PrimeFactor {

    public static void main(String[] args) {
        for (int i = 2; i <= 600851475143L; i++) {
            if (isPrime(i) == true) {
                System.out.println(i);
            }
        }
    }

    public static boolean isPrime(int number) {
        if (number == 1) return false;
        if (number == 2) return true;
        if (number % 2 == 0) return false;
        for (int i = 3; i <= number; i++) {
            if (number % i == 0) return false;
        }
        return true;
    }
}

问题答案:

为什么要这么复杂?您 不需要isPrime() 这样的事情。除以最小除数(素数),然后从素数开始循环。这是我的简单代码:

public class PrimeFactor {

    public static int largestPrimeFactor(long number) {
        int i;

        for (i = 2; i <= number; i++) {
            if (number % i == 0) {
                number /= i;
                i--;
            }
        }

        return i;
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        System.out.println(largestPrimeFactor(13195));
        System.out.println(largestPrimeFactor(600851475143L));
    }
}


 类似资料:
  • 我在学校有个问题要解决,是这样的: 编写一个程序,读取大于1的正整数,然后按递增顺序打印出该数字的素数因子。如果数字是素数,请打印出该数字,然后再打印一条语句,说明它是素数,如其中一个示例所示。 然后我写了这个程序,当我输入一个实际的素数时,它有预期的行为。如果我输入97,输出将是“97是一个素数”应该是这样的。 但当我输入120时,它会打印“2 2 3 5是素数”,其中预期的行为只是打印数字,而

  • 问题内容: 问题 在这个项目中,您将编写一个Java程序,该程序从标准输入中读取一个正整数n,然后打印出前n个素数。我们说,如果存在整数k使得m = kd,则整数m可被非零整数d整除,即,如果d被均分为m。等效地,如果将m的整数除以d,则m可被d整除。我们也可以通过说d是m的除数来表达这一点。如果正整数p的唯一正数是1和p,则称其为质数。此规则的一个例外是数字1本身,它被视为非素数。非素数的正整数

  • 问题内容: 我正在尝试实现一个函数,该函数将正整数作为输入并返回包含的素数分解中所有数字的列表。 我已经走了这么远,但我认为最好在这里使用递归,不确定如何在这里创建递归代码,基本情况是什么?首先。 我的代码: 问题答案: 一个简单的审判部门: 具有复杂性(最坏的情况)。您可以通过特殊情况2并仅在奇数上循环(或特殊情况下将更多小质数并在可能的除数上循环)来轻松改进它。

  • 问题内容: 我想找到小于10 ^ 12的大数的质分解。我得到了以下代码(在Java中): 首先,上述算法的复杂性是什么?我很难找到它。 而且对于大量的素数来说太慢了。 有没有更好的算法,否则如何优化这种算法? 问题答案: 如果您想分解 许多 大数,那么最好先找到质数最大(例如使用Eratosthenes的Sieve)。然后,您只需要检查那些质数是否是因数,而不是全部测试。

  • 我们不允许对书籍、工具、软件库等寻求建议的问题。您可以编辑问题,以便用事实和引文来回答。 我正在寻找用于快速素性测试和大数因式分解的Java API。任何指针都会对我很有帮助。 我找到的资源有: BigInteger-没有因式分解 素数-处理整数 LargeInteger-没有因式分解 我期待着一个API使用椭圆曲线分解或二次筛。 另一个资源:使用椭圆曲线方法的因式分解。 限制:10000位数字。

  • 本文向大家介绍Java程序的数组元素相乘,包括了Java程序的数组元素相乘的使用技巧和注意事项,需要的朋友参考一下 查找数组元素的乘积。 创建一个空变量(product)。 用1初始化它。 在循环中遍历每个元素(或从用户那里获取每个元素)将每个元素乘以乘积。 打印乘积(product)。 示例 输出结果