素数乘以3表示为素数

时间:2015-05-31 04:26:20

标签: python

我试图在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 ...) 任何人都可以看到我的代码有问题吗?

3 个答案:

答案 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;