gpt4 book ai didi

java - python 代码运行不正确,java 中也一样

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:31:55 24 4
gpt4 key购买 nike

我试图使用 Python 解决欧拉计划问题 10,但我的程序给出了错误的结果。由于我是 python 的完全菜鸟,而且我在我的(显然是蛮力的)逻辑中找不到任何错误,我用 java 编写了一个程序(几乎翻译了它),它给出了不同的结果,结果证明是正确的.

这是python代码:

from math import *

limit = 2000000

def isPrime(number):
if number == 2: return 1
elif number % 2 == 0: return 0
elif number == 3: return 1
elif number == 5: return 1
elif number == 7: return 1
else:
rootOfNumber = sqrt(number)
tag = 3
while tag < rootOfNumber:
if number % tag != 0:
tag += 2
else:
break ###
if tag >= rootOfNumber: ###EDIT: it should by only tag > rootOfNumber here
return 1 ### Thats what the problem was.
else:
return 0

sum = 2 # 2 is an even prime, something we are not iterating for
for i in range(3, limit, 2):
if isPrime(i) == 1:
sum += i

print(sum)
print('done...')

等效的java代码是:

public class Prob10{
static int limit = 2000000;
static long sum = 2L; // 2 is an even prime, something we are not iterating for

public static void main (String[] args) {
for(int i = 3; i < limit; i+=2) {
if( isPrime(i) )
sum += i;
}
System.out.println(sum);
}

private static boolean isPrime (int number) {
if (number == 2) return true;
else if (number == 3 || number == 5 || number == 7) return true;
else {
double rootOfNumber = Math.sqrt(number);
int tag = 3;
while (tag < rootOfNumber) {
if (number % tag != 0)
tag +=2;
else
break;
}
if (tag > rootOfNumber)
return true;
else
return false;
}
}

}

我认为我犯了一些愚蠢的错误或遗漏了一些微妙的地方。

附注我知道我的 isPrime 实现不太好。我不打印输出,因为它可能会破坏其他人的问题。

欢迎对 python 程序中的(不良)风格发表任何评论。

最佳答案

尝试使用您的代码运行,例如 isPrime(49)。你应该从那里找出你的问题。您在 if (tag > rootOfNumber) 中用 >= 替换了 >.此外,作为一些编码风格,您可以将第一行替换为:

if i in (2, 3, 5, 7): return 1
elif number % 2 == 0: return 0
else:
......

关于java - python 代码运行不正确,java 中也一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9634946/

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