我试图在Python中创建一个函数来检查给定数字是否是 prime 数字,所以我写了这段代码:
String JsonStr = readMyJsonFile(); //readMyJsonFile() is the same method you created
ArrayList<String> sortedKey = new ArrayList<String>();
try {
JSONObject jsonObj = new JSONObject(JsonStr);
JSONObject questionMark = jsonObj.getJSONObject("structure_details");
Iterator keys = questionMark.keys();
while(keys.hasNext()) {
String currentDynamicKey = (String)keys.next();
sortedKey.add(currentDynamicKey);
}
Collections.sort(sortedKey);
for(String str:sortedKey )
{ JSONObject currentDynamicValue = questionMark.getJSONObject(str);
}
}
catch (Exception e) {
e.printStackTrace();
}
由于某种原因,每个数字(Prime_number * 3)的总和显示为素数(例如,这些数字显示为素数:9,21,15,25 ...) 任何人都可以看到我的代码有问题吗?
答案 0 :(得分:2)
发生这种情况,因为您在循环的第一次迭代时从is_prime
返回。您测试x
是否可以被2分割,如果是,则返回True
,否则返回False
。
从循环中删除else
子句,并在结束后返回True
。
def is_prime(x):
if x<2:
return False
elif x==2:
return True
else:
for n in range(2,x):
if (x%n)==0:
return False
return True
答案 1 :(得分:1)
因为你在循环的第一次迭代中return
。在循环耗尽之前,你不可能知道某些东西是素数。因此,在迭代完成之前,不要返回True
。
def is_prime(x):
if x<2:
return False
elif x==2:
return True
else:
for n in range(2,x):
if (x%n)==0:
return False
return True
答案 2 :(得分:0)
更有效的方法只会迭代到x的平方根。
import math;
def isPrime(x):
if x < 2:
return False;
elif x == 2:
return True;
else:
for n in range(2, int(math.sqrt(x))+1):
if x%n == 0:
return False;
return True;
# Test the method for first 50 natural numbers
for i in range(51):
if isPrime(i):
print i;