The output is not random, but as the desired output is not defined, I'll start with explaining what the current algorithm actually does;
The code can be split in to two main functionalities. The first functionality looks for a prime number n
. If n
is not prime, the code continues to the next n
:
for n in range(1,10000000):
if n>1:
for i in range(2,n):
if n % i == 0:
break
第二个功能只有在n
为prime(for..else
的巧妙使用)时才发挥作用.它现在将判断n+2
是否可以被2到n+1
之间的任何数字整除.在下面的片段中,我冒昧地将v
替换为n+2
,因为我相信这会让事情更清楚一些;
else:
#v = 2+n # taking liberty..
for i in range(2, n+2):
if (n+2) % i == 0:
break
else:
print(n, n+2)
为了说明实际发生的情况,我 Select 了素数5
、7
、11
和23
,因为我相信这四个可以很好地解释输出.从5开始:
for i in range(2, 7): # i -> [2, 3, 4, 5, 6]
if (7) % i == 0:
break
else:
print(5, 7)
在上面的代码片段中,5 7
将被打印5次,循环中的每个i
打印一次,因为7是素数,不能被任何给定的i
整除.
for i in range(2, 9): # i -> [2, 3, 4, 5, 6, 7, 8]
if (9) % i == 0:
break
else:
print(7, 9)
在这里,你会发现7 9
只打印一次,因为9不能被2整除,但它可以被3整除-在这种情况下,循环中断,并继续到下一个素数n
.现在让我们看看n=11
:
for i in range(2, 13): # i -> [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
if (13) % i == 0:
break
else:
print(11, 13)
这里,与n=5
一样,n+2
也是素数(13).由于序列11 13
不能被i
中的任何数字整除,因此将打印i
的长度,即11(它将始终是n
,因为我们从2开始,并将2添加到n
).
for i in range(2, 25): # i -> [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
if (25) % i == 0:
break
else:
print(23, 25)
这是较低数字领域的第一个有趣的 case .到23岁时,所有n+2
人要么是素数,要么可以被3整除;它们被打印了n
次,或者只有一次.对于n=23
,序列23 25
被打印3次,因为25不能被2、3或4整除(3次打印),但它可以被5整除,所以现在循环再次中断,并继续到下一个素数n
.
同样,您要查找的结果输出不清楚,但通过阅读前面的 comments ,我必须警告-此解决方案不会打印由2分隔的两个素数(如@alani所示),它只会确保每行只打印一次:
for n in range(3,10000000):
for i in range(2,n):
if n % i == 0:
break
else:
v = 2+n
for i in range(3,v):
if v % i:
print(n,v)
break