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

正在尝试发布项目euler#3

巩枫
2023-03-14

我试图解决欧拉三号工程,但我对停止计算的逻辑相当混乱。

以下是第三个Euler项目:

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

600851475143的最大质因数是什么?

我创建了一个函数来检查数字是否为素数:

public static boolean isPrime(int number) {
    if (number % 2 == 0)
        return false;
    
    for (int i = 3; i*i <= number; i+=2) {
        System.out.println("Dividing the number " + number + " by: " + i);
        if (number % i == 0)
            return false;
    }
    return true;
}

以及一个函数,用于检查质数是否是该数的一个因子:

 public static boolean isFactor(int number, int prime) {
    if (number % prime == 0)
        return true;
    else
        return false;
}

唯一的问题是主函数,我正在尝试这样的操作:

 public static void main(String[] args) {
    
    int number = 13195;
    int i = 3;
    
    do {
        i++;
    } while (isPrime(i) && isFactor(number, i) == false);
    
    System.out.println(i);
    
}

我知道逻辑不正确,但我真的坚持了一个多小时。

我知道这里的主要目标是循环,找到一个素数并检查这个素数是否是数字的因子并找到最大的一个,但是停止条件是如果循环的数字是素数并且不是数字的因子。

对不起,混乱,我很卡住:)谢谢!

共有3个答案

曾典
2023-03-14

主代码中的循环在找到所述数字的第一个素数因子后停止。相反,我们必须消除所有这样的素因子,直到我们达到其中最大的一个。我不愿意在这里分享任何代码,因为问题确实很具体。不要在出现素数除数时中断循环,而是尝试列出所有素数除数。

希望这有帮助。

微生嘉
2023-03-14
public class LargestPrimeFactor {
private long num;
public LargestPrimeFactor(long num){
    this.num=num;
}
public long calculate(){
    for(long i=1;i<=num/2;i++)
        if(num%i==0)
            if(isPrime(num/i)) 
                return num/i;

    return 1;
}
private static boolean isPrime(long num){
    for(long i=2;i<=(long)Math.sqrt(num);i++){
        if(num%i==0) return false;
    }
    return true;
}
}
严书
2023-03-14

您的逻辑的主要问题是您从最小的素数开始,一旦它遇到一个素数并且给定数字的因子,您的程序就会停止。您应该做的是从另一端开始。正如我们所知,一个数字的任何素数除数都不会大于该数字的平方根,所以您可以做的是:

int number = 13195;
int i = (int)Math.sqrt(number);

do {
    i--;
} while (isPrime(i) && isFactor(number, i) == false);

System.out.println(i);

600851475143还有其他更改,这不适用于int,因此请尝试在任何地方使用long来计算它。

这是我对这个问题的解决方案,它不是100%正确,但它适用于这个问题。

public static void main(String[] args) {
    long number= 600851475143L;
    int rootOfNumber = (int)Math.sqrt(number)+10;
    for(int i = rootOfNumber; i > 2; i--) {
        if(number % i == 0) {
            if(psudoprime(i)) {
                System.out.println(i);
                break;
            }
        }
    }

}

public static boolean psudoprime(int num) {
    for(int i = 2; i < 100; i++) {
        if(num % i == 0) {
            return false;
        }
    }
    return true;
}
 类似资料:
  • 问题: 13195的质因数是5、7、13、29。 数字600851475143中最大的素因子是什么? 我发现这个很简单,但运行这个文件花了很长时间,已经运行了一段时间,我得到的最高数字是716151937。 这是我的代码,我只是要等待还是我的代码中有错误? }

  • 问题内容: 13195的素数是5、7、13和29。600851475143的最大素数是多少? 好的,所以我正在研究python中的项目Euler问题3。我有点困惑。我无法确定我通过该程序获得的答案是否正确。如果有人能告诉我即时消息做错了,那太好了! 问题答案: 这个数字很大,不鼓励您使用蛮力。 将在打算把功能号码,这是 一个很大 的内存。 检查数字是否可以除以奇数并不意味着该奇数是质数。您提供的算

  • 问题内容: 欧拉计画的问题3是: 13195的主要因子是5、7、13和29。 600851475143的最大素数是多少? 我的解决方案需要永远。我认为我得到了正确的实施;但是,在进行大量测试时,我无法看到结果。它永远运行。我想知道我的算法是否有问题: 问题答案: 尽管不是Java语言,但我认为您可以做到以下几点。基本上,只需要测试奇数除数就可以减少迭代次数,并且最多可以减少数字的平方根。这是一种蛮

  • 我的代码: 输出:

  • 默认 Library 只会发布 release variant(变种)版本。该版本将会被所有引用它的项目使用,无论编译出多少个版本。由于 Gradle 的限制,我们正在努力解决这个问题。你可以控制哪一个 Variant 版本作为发行版: android { defaultPublishConfig "debug" } 注意这里的发布配置对应的值是完整的 variant 版本名称。reles

  • 目的 本文档是一个技术指导性文件,用于说明“ ThingJS 项目离线部署包”安装使用的相关问题。 说明 ThingJS 项目离线部署包可由已开通 ThingJS 3D 可视化开发平台(https://www.thingjs.com) VIP商业开发者的账号进行下载。 ThingJS 项目离线部署包的正式部署授权购买者也可获得项目离线部署包。但建议项目离线部署包的正式授权者开通 VIP 商业开发者