我怎么能检查一个数字是否是素数?

时间:2011-09-17 17:20:01

标签: python

  

可能重复:
  Simple Prime Generator in Python

首先我会提示用户输入任何数字。然后我的代码将检查用户输入的数字是否是素数。

这是我的代码:

num = int(raw_input("Input any of the number you like:"))
for x in range(2, int(num**0.5)+1):
    if num % x == 0:
        print "It is not a prime number"
    else:
        print "It is a prime number"

但问题是我似乎无法获得2和3的输出。当我随机输入任何数字如134245时,系统将输出很多句子。同时我不知道为什么?

欣赏任何善良的灵魂来帮助我:)

7 个答案:

答案 0 :(得分:5)

import urllib
tmpl = 'http://www.wolframalpha.com/input/?i=is+%d+a+prime+number'
def is_prime(n):
    return ('is a prime number' in urllib.urlopen(tmpl % (n,)).read())

答案 1 :(得分:1)

你应该在num % x == 0为真之后停止(不需要进一步测试)并打印'它是素数',只有当循环完成而没有任何打印之前。

答案 2 :(得分:0)

如果数字仅除以1itself,则该数字为素数。伪代码如下:

boolean prime = true;
for (int i = 2; i * i <= num; i++)
   if (num % i == 0) {
      prime = false;
      break;
   }

if (prime)
  println("It is prime!");
else 
  println("It is not prime!");

答案 3 :(得分:0)

你的代码结构不合理 - 即使你已经知道数字是复合的,算法也会一直循环到你的范围的顶部,并且它也会在每次迭代时打印出一些结果。不

您可以将逻辑放入函数中并返回TrueFalse以获得素数。然后,您可以在if语句中检查函数的结果。

def is_prime(num):
    for x in range(2, int(num**0.5)+1):
        if num % x == 0:
            return False
    return True

num = int(raw_input("Input any of the number you like:"))
if not is_prime(num):
    print "It is not a prime number"
else:
    print "It is a prime number"

答案 4 :(得分:0)

看看你的代码:

num = ...
for x in range(2, int(num**0.5)+1):
    print something

循环体在每次迭代时执行。这意味着您在每次迭代时都会打印一些内容,例如,您检查的每个x是否为num的因子,您打印。这不是你应该做的;为了确定一个数字是否为素数,首先检查所有可能的因素,然后打印您的结果。所以你不应该在循环之后打印任何东西。

答案 5 :(得分:0)

  

但问题是我似乎无法获得2和3的输出。

您正在从2循环到ceil(sqrt(n))。对于2和3,这是一个空范围,因此不会发生迭代。无论是特殊情况还是重写代码,使得它假定n是素数并尝试在循环中反驳它。

  

系统会输出很多句子。

您在每次迭代时打印。相反,使用布尔标志(或过早返回,如果将其分解为函数)来确定素数并在循环之后基于该素数打印一次。

答案 6 :(得分:0)

以下是两个用于计算素数的Python例程。 (提示:谷歌为Eratosthenes筛选):

def pythonicSieve(maxValue):
    """
    A Pythonic Sieve of Eratosthenes - this one seems to run slower than the other.
    see http://love-python.blogspot.com/2008/02/find-prime-number-upto-100-nums-range2.html
    """
    return [x for x in range(2,maxValue) if not [t for t in range(2,x) if not x%t]]

def sieveOfEratosthenes(maxValue):
    """
    see http://hobershort.wordpress.com/2008/04/15/sieve-of-eratosthenes-in-python/
    """
    primes = range(2, maxValue+1)
    for n in primes:
        p = 2
        while n*p <= primes[-1]:
            if n*p in primes:
                primes.remove(n*p)
            p += 1
    return primes