本帖最后由 yysniper 于 2015-6-3 17:43 编辑
先上图片渲染下气氛
看看片中1小时09分28秒中出现的代码
看不太清,我给整理了下
[Python] 纯文本查看 复制代码 #BlueBook code decryption
import sys
def sieve(n):
#Compute primes using sieve of Eratosthenes
x=[1]*n
x[1]=0
for i in range(2,n/2):
j=2*i
while j<n:
x[j]=0
j=j+1
return x
def prime(n,x):
#Find nth prime
i=1
j=1
while j<=n:
if x==1:
j=j+1
i=i+1
return i-1
#Compute BlueBook unlock code
x=sieve(10000)
code =[1206,301,384,5]
key=[1,1,2,2]
sys.stdout.write("".join(chr(i) for i in [73,83,66,78,32,61,32]))
for i in range(0,4):
sys.stdout.write(str(prime(code,x)*key))
print
毋庸置疑,Python代码,看起来真亲切呀!!!
下面开始分析:
代码中主要有两个函数,一个是sieve(n),另一个是prime(n,x)。关于这两个函数的作用,我们从注释中可以知道
第一个函数sieve(n)的注释:
[Python] 纯文本查看 复制代码 #Compute primes using sieve of Eratosthenes
我谷歌了一下是用 埃拉托斯特尼筛法 计算数字n以前的所有素数。看来电影都喜欢算素数,不信的话看我另一个帖子娱乐一下:电影《战狼》中代码分析。
不过,片中的代码是错的,下面我给个对的:
[Python] 纯文本查看 复制代码 def sieve(n):
i = 0
count = 0
L=[]
for k in range(2,n):
L.append(k)
while L[i] ** 2 < L[-1]:
for j in range(i + 1,len(L)):
if L[j] % L == 0:
L[j] = 0
count += 1
L.sort()
L = L[count:]
count = 0
i += 1
return L
第二个函数prime(n,x)的注释:
[Python] 纯文本查看 复制代码 #Find nth prime
直译就是找到第n个素数。那么我翻译下:就是找到x中第n个素数
从电影中的代码可以看出来,x就是一个列表,那就是找到x列表中的第n个素数,不过电影中的代码明显是错的,而且逻辑上是会造成索引错误,就是超过了列表的范围了
依然给个对的
[Python] 纯文本查看 复制代码 def prime(n,x):
#Find nth prime
return x[n]
剩下的部分就比较简单了,而且没有语法错误,不过最后那行print就不要了,电影也就到这了,不过这些代码是可以运行了,下面放出修改后的代码:
[Python] 纯文本查看 复制代码 #BlueBook code decryption
import sys
def sieve(n):
#Compute primes using sieve of Eratosthenes
i = 0
count = 0
L=[]
for k in range(2,n):
L.append(k)
while L[i] ** 2 < L[-1]:
for j in range(i + 1,len(L)):
if L[j] % L == 0:
L[j] = 0
count += 1
L.sort()
L = L[count:]
count = 0
i += 1
return L
def prime(n,x):
#Find nth prime
return x[n]
#Compute BlueBook unlock code
x=sieve(10000)
code =[1206,301,384,5]
key=[1,1,2,2]
sys.stdout.write("".join(chr(i) for i in [73,83,66,78,32,61,32]))
for i in range(0,4):
sys.stdout.write(str(prime(code[i],x)*key))
咱们来看看运行的结果:
你没有看错,输出就是ISBN = 97811993531422,不过这显然不是代码注释中的[Python] 纯文本查看 复制代码 #Compute BlueBook unlock code ,看起来是一本书的书号。
但是,我又百度百科了ISBN,里面介绍ISBN最多只有13位,这里明明是14位,所以这不是书号。
那么问题来了,今天中午到底吃什么好呢?
好吧放出电影链接,百度盘的,不知道会不会被禁:
http://pan.baidu.com/s/1ntzeAcL
|