gpt4 book ai didi

java - 我想通过使用算术级数公式更有效地解决 Project Euler #1,但我的算法返回的答案略有偏差

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:46:42 24 4
gpt4 key购买 nike

这是我写的第一个低效的方法:

public int sumOfMultiplesOf3or5Under1000() {
int sum = 0;
for (int i = 0; i < 1000; i++) {
if (i % 3 == 0 || i % 5 == 0) {
sum += i;
}
}
return sum;
}

这是我尝试使用算术级数公式编写更有效的解决方案:

public int usingAP() {
return sumOfAP(3,3,333) + sumOfAP(5,5,199) - sumOfAP(15,15,66);
}

public int sumOfAP(int firstTerm, int commonDifference, int numberOfTerms){
int sum = (numberOfTerms / 2) * (2 * firstTerm + (numberOfTerms -
1) * commonDifference);
return sum;
}

当我调用 sumOfMultiplesOf3or5Under1000() 时,我得到了正确的答案:

233168

当我调用 usingAP() 时,我得到的答案仅相差 1,001:

232167

最佳答案

由于我在上面的评论中所述的原因,我不确定您为什么认为第一种方法效率低下。然而,您似乎成为了 sumOfAP 方法中舍入错误的受害者。你很接近,但你只需要一些方法将临时变量存储为 double 而不是 int 这样你就可以保持精度。我能够通过除以和乘以 2D 而不是 2 来修复它:

public static int sumOfAP(int firstTerm, int commonDifference, int numberOfTerms){
return (int) ((numberOfTerms / 2D) * (2D * firstTerm + (numberOfTerms - 1) * commonDifference));
}

您可以运行以下命令并验证它们是否等效:

System.out.println(usingAP());
System.out.println(sumOfMultiplesOf3or5Under1000());

输出:

233168
233168

关于java - 我想通过使用算术级数公式更有效地解决 Project Euler #1,但我的算法返回的答案略有偏差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49992037/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com