[英]Finding the prime factor of a Long number using Java
public class prime
{
public static void main(String[] args)
{
long thing = 600851475143L;
for(long i = 300425737571L ; i == 0 ; i-- ){
if (thing % i == 0)
{
long answer = i;
System.out.println(answer);
break;
}
}
}
}
这是我目前拥有的代码,但是我已经在DrJava中运行了几分钟,它没有返回任何结果。 我猜大概有大约一百万种方法可以优化我的代码; 有人能给我一些提示吗?
今天试图解决一些编程问题,而这又给我带来了麻烦。
非常感谢 :)
对于不是很大的值计算素数因子,生成高达“事物”的平方根的素数,然后逐个进行尝试,效率会更高。
素数生成可以完成:
不过,您只需要迭代到sqrt(thing)。
通常,从2开始迭代将更快,因为一半的数字将具有2的因子(而1/3的因子将是3的因子,依此类推)。
您也只在第一个因素上挣扎,因此会错过任何其他因素
long thing = 600851475143L;
for(long i = 0; i < 300425737571L ; i++ ){
if (i * i > thing) {
break;
}
if (thing % i == 0) {
long answer = i;
System.out.println(answer);
break;
}
}
不,它马上终止,因为
i == 0
不会保留第一次迭代。
您可能想写这样的东西:
public class Test {
public static void main(String[] args) {
long thing = 600851475143L;
for (long i = 16857 /* 300425737571L */; i > 0; i--) {
if (thing % i == 0) {
long answer = i;
// Print the largest prime factor, then break loop (and quit)
System.out.println(answer);
break;
}
}
}
}
但是,这种幼稚的分解方法效率极低。 由于600851475143
的因式分解为71 * 839 * 1471 * 6857
您必须从300425737571迭代到6857并每次取模。 有许多复杂的方法可以立即解决因式分解问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.