Python向左,数学向右:乌拉姆的素数研究
小詹学Python
共 9465字,需浏览 19分钟
· 2021-05-10
1. 引子
2. 灵光乍现
3. 乌拉姆现象
import numpy as np
from PIL import Image
def find_prime_list(n):
"""返回不大于n的素数组成的numpy数组"""
nums = np.arange(n+1) # 生成0到n的数组
nums[1] = 0 # 数组第1个元素置为0,从2开始,都是非0的
k, m = 0, pow(n+1, 0.5)
while True: # 循环
primes = nums[nums>0] # 找出所有非0的元素
if primes.any(): # 如果存在不为0的元素
p = primes[k] # 则第一个元素为素数
k += 1
nums[2*p::p] = 0 # 这个素数的所有倍数,都置为0
if p > m: # 如果找到的素数大于上限的平方根
break # 则退出循环
else:
break # 全部0,也退出循环
return nums[nums>0]
def get_square(n):
"""将从1开始的n个连续的整数排成一个列表"""
side = int(pow(n, 1/2)) # 方阵边长
if side%2:
row, col = side-1, side-1
direct = 'left'
else:
row, col = 0, 0
direct = 'right'
result = [[None for 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 < 0 or result[row][col-1]: # 如果不能继续向左,则向上
row -= 1
direct = 'up'
else: # 否则继续向左
col -= 1
elif direct == 'up':
if row-1 < 0 or result[row-1][col]: # 如果不能继续向上,则向右
col += 1
direct = 'right'
else: # 否则继续向上
row -= 1
return np.array(result)
def plot_prime(side):
"""绘制不大于side*side的质数分布图"""
n = side * side
square = get_square(n)
primes = find_prime_list(n)
im_arr = np.isin(square, primes).astype(np.uint8) * 255
im = Image.fromarray(im_arr)
im.save('%dx%d.jpg'%(side, side))
plot_prime(100)
plot_prime(300)
plot_prime(600)
plot_prime(1000)
4. 悖论
---------------------------------
查找1千万以内的素数耗时0.365秒
共找到664579个素数
---------------------------------
查找1亿以内的素数耗时2.862秒
共找到5761455个素数
推荐阅读
评论
【第129期】程序员的新宠:三款终端工具,让你告别Xshell!
概述 WindTerm:跨平台的SSH利器 首先介绍的是WindTerm,这是一款使用C语言开发的跨平台SSH客户端。它不仅完全免费,而且没有商业使用的限制。WindTerm支持SSH v2、Telnet、Raw Tcp等协议,而且性能出色,甚至超过了FinalShell和Electerm。功能
前端微服务
0
上班的时候,有一群摸鱼搭子非常重要...
上班的时候,有一群摸鱼搭子非常重要!一到上班时间,他们就从四面八方涌进群里冒泡...从八卦聊到股市、从职场聊到乌X兰局势,偶尔还会复读、相亲、battle...然后,下午6点钟准时消失不见...所以你要不要加入我们一起摸鱼?我们有北京、上海、深圳、广州、杭州、武汉、成都、南京等8个城市的摸鱼群,还有
产品经理日记
0
周四002 瑞超:同样落寞的境遇——北雪平vs埃尔夫斯堡
上赛季最终排名联赛第9的北雪平本赛季伊始表现不佳,4轮战罢他们仅以1胜1平2负的战绩排在倒数第三,这支历史上曾夺得13次联赛冠军、6次杯赛冠军老牌劲旅,正如英格兰赛场上的一众百年俱乐部,在低谷中不断探索着出路。球队主教练安德烈亚斯·阿尔姆曾是AIK索尔纳及赫根队的主教练,他于今年年初刚刚拿起球队教鞭
产品与体验
0
日本影山优佳最新杂志照,展现充满透明感的美丽
今天的图文分享的是影山优佳的杂志写真。元日向坂46的影山优佳,登上了写真杂志《周刊FLASH》5/7和5/14合并号的封面。影山优佳是日本艺人、女演员、前偶像。身高155厘米。2001年5月8日出生于东京都。2023年7月从组合日向坂46毕业,之后作为演员活跃的影山优佳,在《周刊FLAS
python教程
0
盘点一个使用超级鹰识别验证码并自动登录的案例
点击上方“Python共享之家”,进行关注回复“资源”即可获赠Python学习资料今日鸡汤江上几人在,天涯孤棹还。大家好,我是皮皮。一、前言前几天在Python钻石交流群【静惜】问了一个Python实现识别验证码并自动登录的问题,提问截图如下:验证码的截图如下所示:二、实现过程这里大家激烈的探讨,【
IT共享之家
0
Python列表知识应知应会
点击上方“Go语言进阶学习”,进行关注回复“Go语言”即可获赠从入门到进阶共10本电子书今日鸡汤只在此山中,云深不知处。一、前言 在Python程序开发中,列表(List)经常会使用。假设一个班里有50个学生现需要统计每一个学生的总成绩情况,如果不使用列
Go语言进阶学习
0
朋友,你也不想一个人孤孤单单的上班吧?
上班的时候,有一群摸鱼搭子非常重要!一到上班时间,他们就从四面八方涌进群里冒泡...从八卦聊到股市、从职场聊到乌X兰局势,偶尔还会复读、相亲、battle...然后,下午6点钟准时消失不见...所以你要不要加入我们一起摸鱼?我们有北京、上海、深圳、广州、杭州、武汉、成都、南京等8个城市的摸鱼群,还有
产品经理日记
0
美团社招一面,比预想的简单。
面试题大全:www.javacn.site面试这件事就很玄学,有时候你觉得他可能很难,但面完之后竟然出奇的顺利,问的问题你都会;有些你觉得这次面试应该很简单,但去了之后就被问懵了,所以面试这件事有很多一部分运气的成分。所以说,在没有 Offer 之前就是多准备、楞怂面,主打一个大力出奇迹。这不,逛牛
Java中文社群
0