当前位置: 首页 > 知识库问答 >
问题:

这段代码可以运行和编译,但当我输入一个非常大的数字时,什么都不会发生。(Euler项目,问题3)

伏建修
2023-03-14

我是个新手。

所以我一直在做Euler项目的问题来提高我的java技能,我通过了前2个。我被第三个卡住了。上面写着:

”13195的质因数是5、7、13、29。

数字600851475143中最大的素因子是什么?"

我写了以下代码

public class Exercise {
    public static void main(String[] args) {
        long a = 600851475143L;
        long i = 1;
        boolean isPrime = true;
        long currentNum = 0;
        while (i <= a) {
            if (a % i == 0) {
                for (long j = 1; j < a; j++) {
                    if (a == i || a % j == 0) {
                        isPrime = false;
                    } else {
                        currentNum = i;
                    }
                }
            }
            i++;
        }
        System.out.println("the largest prime factor of " + a + " is " + currentNum);
    }
}

它完全适用于较小的数字,如10,20,55,100,560523等,但当我输入一个很大的数字,如600851475143L,代码编译和运行,但什么都不会发生。

感谢任何帮助,谢谢!

共有3个答案

常温文
2023-03-14
public class Exercise  {
    public static void main(String[] r)
       {
        try{
        long a = 600851475143L; 
        System.out.println("the largest prime factor of " + a+ " is " +largestPrimeFactor(a) );
        }catch(Exception e)
        {
            e.printStackTrace();
        }
        }

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

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

试试这个

司徒嘉祥
2023-03-14

您有嵌套条件,其执行将跳转CPU。

while (i <= a) {// This condition will be executed 600851475143 times
                if (a % i == 0) {
                    for (long j = 1; j < a; j++) {// This condition will be executed 600851475143 times

到目前为止,a=600851475143,代码将执行次。这就是为什么您看不到输出,因为CPU正忙于执行这么多条件。

您看到a=100的输出也是因为对于这个输入迭代次数=100*100,这在任何现代机器上都不会花费太多时间

龙新荣
2023-03-14

查看您的a变量。它是600851475143L
这意味着您的处理器必须根据您的条件执行多达600851475143循环周期:

while (i <= a) {
    i++;
}

我没有考虑到while()循环中的代码,但即使没有它也太多了,即使对于现代计算机来说:)

如果你想计算该范围内数的质因数......你应该考虑使用一些比简单迭代更有效的方法。

 类似资料:
  • 我对龙目岛或月食有问题,不确定是哪一个。我有一个Spring Boot maven项目,我正在使用Lombok。我在pom中添加了这个。xml文件,我使用了用于eclipse的lombok安装。 发生的事情是,我可以对项目进行和以及maven更新,一切都按预期构建。一旦我去运行项目,错误就开始出现,我得到错误,例如: 在运行项目时,有什么事情可以让龙目岛脱颖而出吗?! 我正在运行Eclipse O

  • 您都知道将依赖项放入pom.xml文件并运行“MVN clean Install”的过程。当这个命令运行时,依赖项的jar文件被下载到。m2存储库中。 当我们使用IntelliJ和run/debug配置窗口运行应用程序时,IntelliJ如何知道在哪里查找依赖项的jar文件?IntelliJ中的每个GUI操作实际上都取代了命令行操作。当我们单击“运行”按钮时,在“幕后”提交的命令行操作是什么。我相

  • 在方法或类范围内,下面的行编译(带有警告): 在类作用域中,变量获取其默认值,以下给出未定义引用错误: 这难道不是第一个应该以相同的未定义引用错误结束吗?或者第二行应该编译?或者我错过了什么?

  • 我在一个类中有一个方法,该方法具有使用泛型指定的返回类型。 对于通用返回类型,我假设上面示例中的返回将评估为: 相反,被正确返回和打印。 如果我将调用更改为: 我错过了什么,以帮助我理解这里发生了什么,为什么原始版本没有导致编译错误。

  • 此代码可编译但不运行;当我试图运行这个程序时,它会给出一个。我做错了什么?