if side%2: row, col = side-1, side-1 direct = 'left' else: row, col = 0, 0 direct = 'right'
result = [[Nonefor j in range(side)] for i in range(side)]
for i in range(n, 0, -1): result[row][col] = i
if direct == 'right': if col+1 == side or result[row][col+1]: # 如果不能继续向右,则向下: row += 1 direct = 'down' else: # 否则继续向右 col += 1 elif direct == 'down': if row+1 == side or result[row+1][col]: # 如果不能继续向下,则向左 col -= 1 direct = 'left' else: # 否则继续向下 row += 1 elif direct == 'left': if col-1 < 0or result[row][col-1]: # 如果不能继续向左,则向上 row -= 1 direct = 'up' else: # 否则继续向左 col -= 1 elif direct == 'up': if row-1 < 0or result[row-1][col]: # 如果不能继续向上,则向右 col += 1 direct = 'right' else: # 否则继续向上 row -= 1
return np.array(result)
有了素数表,有了方阵,只剩下替换操作,就简单多了。
defplot_prime(side): """绘制不大于side*side的质数分布图"""
n = side * side square = get_square(n) primes = find_prime_list(n)
乌拉姆瞅了一眼屏幕,低头在一张草纸上写下了这样一个公式。“这里的 π 可不是圆周率,而是表示不大于自然数 x 的素数的个数。”他左手端起早已凉透的半杯咖啡,用右手中指的关节轻扣草纸。 “欧拉和勒让德早已证明了当 x 趋于无穷大时,π(x)与 x 之比等于0——这意味着,即便素数有无穷多个,也不应该出现在自然数中,因为素数在自然数中出现的概率为0。”“这可真是一个有趣的悖论。”我不知道乌拉姆要表达什么,只好敷衍地回应了一句。沉默有顷,乌拉姆幽幽地说:"Python在几秒钟内就可以计算出,当 x 趋近1亿时,素数出现的概率降低到5.76%。这是一个强大的工具,可以瞬间完成单凭人力无法完成的计算任务,但是,却剥夺了人类享受在黑暗中探索和思考的乐趣。”“伸手不见五指,没有方向,没有终点,那不是痛苦吗?”“不,那是一种享受。天堂向左,数学向右。”“好吧,我想我能理解你的意思。时间的不可逆,和对时光逆转的渴望,令人类创造了一些有趣的概念,比如天堂,还有Python。为什么不是Python向左,数学向右呢,乌拉姆博士?”