2014-12-21 51 views
2

我想在python中编写一个程序,它可以打印素数序列的第1到第n个数字,或打印素数序列的第n个数字。这是代码。只打印素数序列的第n个数python

import math 

P = 2 
X = raw_input('Choose a number: ') 
Y = 1 

def prime(P, Y): 
    Choice = raw_input('Select 1 to print X numbers of the Prime sequence. \nSelect 2 to print the Xth number in the Prime sequence. \nWhat is your choice: ') 

    if Choice == "1": 
     while Y <= int(X): 
      isprime = True 
      for x in range(2, int(P) - 1): 
       if P % x == 0: 
        isprime = False 
        break 
      if isprime: 
       print P 
       Y += 1 
      P += 1 
    elif Choice == "2": 

prime(P, Y) 

基本上,我有第一个部分,所以它打印1到第n个数字的主要序列。然而,我对如何使它只计算第n个素数很感兴趣,其中第n个素数是通过原始输入给出的。在python中必须可以做到这一点,但是,它将如何完成,以及如何做到这一点,而不必添加太多的新变量,但我并不在这里(尽管我会罚款这样做)。帮助将不胜感激。

回答

1

就只有当它的第Y号打印:

if isprime: 
    Y += 1 
    if Y == X: 
     print P 
+0

真的,你有不管他们选择什么,都要以任何方式完成循环并计数到第X个素数;我只是将'if'移到循环内部,并且只要他们选择1或X == Y就打印每个结果。 –

1

添加一个条件,这样,如果要么用户想要打印的所有号码,你已经达到了序列的最后质数,该号码将被打印。 (我还更换了一些更描述那些变量名,并改变它,这样的功能是通过number_of_primes作为其唯一的参数,这似乎更有意义。)

def print_primes(X): 
    choice = raw_input('Select 1 to print X numbers of the Prime sequence. \nSelect 2 to print the Xth number in the Prime sequence. \nWhat is your choice: ') 
    count = 1 
    n = 2 
    while count <= X: 
     is_prime = True 
     for i in range(2, int(n) - 1): 
      if n % i == 0: 
       is_prime = False 
       break 
     if is_prime: 
      if choice == "1" or count == X: 
       print n 
      count += 1 
     n += 1 

number_of_primes = int(raw_input('Choose a number: ')) 
print_primes(number_of_primes)