我正在研究用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)。 示例 输出结果