查找质数到sortest循环条件

时间:2016-01-24 06:55:45

标签: python loops math

我是Python的新手。当我在循环条件下学习时,我得到了下面给出的素数的代码

i = 13
j = 2
while(j <= (i/j)):
 if not(i%j): break
 j = j + 1
 if (j > i/j) : print i, " is prime"

这里我想要逻辑断开条件,如果我们想要找到13是素数或者不是我们使用的循环范围是2到12。 由于循环条件while(j <= (i/j)),他们在这里只使用了3个循环。 循环结构是

 i  ==>  j  while(j <= (i/j))
 13      2  2<=6(13/2) true
 13      3  3<=4(13/3) true
 13      4  4<=3(13/4) false

我的问题是,条件4<=3(13/4)如何满足循环检查素数?

我希望数学符合逻辑任何一个帮助我明确解释。

2 个答案:

答案 0 :(得分:1)

这里重要的是要注意,如果ij = n,则i,j中的至少一个小于或等于sqrt(n)。因此,我们只需要检查直至并包括sqrt(n)的因子。因此,为了测试25是否为素数,我们需要测试高达5的因子。要测试23,我们需要循环并测试2,3和4,然后当我们到达5时,我们注意到我们是&gt; sqrt(23)并休息。测试j> i / j是相同的测试,因为j> i / j意味着j ^ 2>一世。

答案 1 :(得分:0)

我不确定究竟是什么问题,因为提供的代码应正确返回13是素数。我还用97测试了它,它运行得很好。

我认为在尝试求解素数时你会特别注意模数运算符。使用模数运算符,您将模数的左侧除以右侧,并返回余数。如果余数为0,那么您知道该数字不是素数,因为它与某个数字均分。

示例:

>>> 2 % 2
0
>>> 3 % 2
1

在提供的代码中:

i = 13
j = 2
while(j <= (i/j)):                      #1>>
    if not(i%j): break                  #2>>
    j = j + 1                           #3>>
    if (j > i/j) : print i, " is prime" #4>>

while循环如下所示循环(另请注意,如果没有小数,程序会将小数点“置”为最小整数):

循环#1

1>> 2 is less than 6 (13/2), True so enter loop
2>> 13%2 = 1, no break
3>> j now equals 3
4>> 3 < 13/3, no print

循环#2

1>> 3 is less than 4 (13/3), True so continue loop
2>> 13%3 = 1, no break
3>> j now equal 4
4>> 4 > 13/4, prints that the number is prime and proceeds to loop #3

循环#3

1>> 4 is greater than 3 (13/4), so exit loop

要解决素数问题,您可以按照各自的顺序执行以下步骤:

  • 如果number为2,则数字为prime(#1)
  • 如果数字可以被2整除,则数字不是素数(#2)
  • 如果数字可以被3,5,7,9等整除(步数为2),则数字不是素数(#3)

所以你可能得到以下内容:

def get_prime(number):
    if number == 2:
        return True #Number is prime, exit method
    if number % 2 == 0:
        return False #Number is not prime, exit method
    for n in range(3, int(number), 2): #Start at 3, end at number, increment by 2
        if number % n == 0:
            return False #Number is not prime, exit method
    return True #Number passed all tests, is provably prime

后者是首选,因为我们不必保持并增加'一次性变量'(在本例中为j)。为此我们将for循环增加2,并且因为它减少了计算机查找答案所需的时间,因为任何偶数都可以被2整除(返回步骤2)。但是,对于较小的数字(例如13),您将不会注意到差异。

Δ