我是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)
如何满足循环检查素数?
我希望数学符合逻辑任何一个帮助我明确解释。
答案 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
要解决素数问题,您可以按照各自的顺序执行以下步骤:
所以你可能得到以下内容:
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),您将不会注意到差异。
Δ