首先我会提示用户输入任何数字。然后我的代码将检查用户输入的数字是否是素数。
这是我的代码:
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时,系统将输出很多句子。同时我不知道为什么?
欣赏任何善良的灵魂来帮助我:)
答案 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)
如果数字仅除以1
和itself
,则该数字为素数。伪代码如下:
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)
你的代码结构不合理 - 即使你已经知道数字是复合的,算法也会一直循环到你的范围的顶部,并且它也会在每次迭代时打印出一些结果。不
您可以将逻辑放入函数中并返回True
或False
以获得素数。然后,您可以在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