每天学一点Python之NumPy基础11质因数
off999 2024-12-11 16:24 18 浏览 0 评论
质因数 (http://en.wikipedia.org/wiki/Prime_factor) 是指正好整除一个整数而不留余数的质数。对于大数来说,寻找质因数几乎是不可能的。
因此,质因数在密码学中得到了应用。然而,使用正确的算法--费马因式分解法(http://en.wikipedia.org/wiki/Fermat%27s_factorization_method)和 NumPy--对于小数来说,因式分解变得相对容易。
其原理是根据下式将一个数 N 分解成两个数 c 和 d:
我们可以递归地应用因式分解,直到得到所需的质因数。
这需要四个步骤,让我们来看看是如何完成的。
算法要求我们对 a 的值进行多次试验。
首先 我们将创建一个包含试验值的数组。创建一个 NumPy 数组可以省去循环。
不过,在创建数组时要注意,不要创建占用内存过大的数组。在我的系统中,一百万个元素的数组大小似乎恰到好处:
a = np.ceil(np.sqrt(n))
lim = min(n, LIM)
a = np.arange(a, a + lim)
b2 = a ** 2 - n我们使用 ( ceil ) 方法按元素顺序返回输入值的上限。
第二步 获取 b 数组的小数部分。现在我们要检查 ( b ) 是否是正方形。使用名为 ( modf ) 的 NumPy 方法来获取 ( b ) 的小数部分。
数组的小数部分:
fractions = np.modf(np.sqrt(b2))[0]第三步 查找 0 分数。调用 ( where ) NumPy 方法查找零分数的索引,其中分数部分为 0:
indices = np.where(fractions == 0)第四步 找出第一个出现的零分数。
首先,使用上一步的索引数组调用 NumPy 方法 ( take ),获取零分率的值。然后使用 NumPy 方法 ( ravel ) 将数组网格化:
a = np.ravel(np.take(a, indices))[0]这一行有点复杂,但确实展示了两种有用的方法。如果写成
a = a[indices][0]你现在需要知道发生了什么?
在本节中,我们应用了一组有用且有趣的 NumPy 方法,这些方法的说明如下:
Method Name | Method Description |
ceil() | 计算数组元素的上限(参见 http://docs.scipy.org/doc/numpy/reference/generated/numpy.ceil.html) |
modf() | 返回浮点数的小数部分和积分部分(参见 http://docs.scipy.org/doc/numpy/reference/generated/ numpy.modf.html) |
where() | 根据条件返回数组索引(参见 http://docs.scipy.org/doc/numpy/reference/generated/numpy.where.html) |
ravel() | 返回一个扁平化数组(参见 http://docs.scipy.org/doc/numpy/reference/generated/numpy.ravel.html) |
take() | 从数组中提取元素(参见 http://docs.scipy.org/doc/numpy/reference/generated/numpy.take.html) |
- 上一篇:Python 初学者练习:验证哥德巴赫猜想
- 下一篇:详解 Python 中的生成器
相关推荐
- u盘装机制作软件哪个比较好(u盘装机软件推荐)
-
windows微软官方原版系统加上微软的U盘系统制作工具。MediaCreationTool来制作成U盘系统引导盘后来安装系统最纯净安全了。微peu盘驱动好。大白菜老毛桃什么的都用过,都是可以用的,...
- windows7家庭版密钥激活码(win7家庭版激活密钥最新)
-
首先,在桌面上右键点击“计算机”,然后选择“属性”,在窗口底部找到“激活Windows”选项,点击它。然后,选择“在线激活”,输入你的Windows7激活密钥。如果你没有激活密钥,你可以购买一个或者...
- win10好还是win7旗舰版好(windows10好还是windows7旗舰版好)
-
对于个人用户而言,我们更建议购买电脑装Windows10系统。以下是一些原因:兼容性更好:Windows10是微软最新的操作系统,支持大量的最新硬件和驱动程序,高度兼容大多数软件和设备。相比之下,...
-
- 2010office激活密钥25个字符
-
步骤/方式1officeprofessionalplus2010:(office专业版)6QFdx-pYH2G-ppYFd-C7RJM-BBKQ8Bdd3G-xM7FB-Bd2HM-YK63V-VQFdKVYBBJ-TRJpB-QFQ...
-
2025-11-07 01:03 off999
- 刷机(刷机软件)
-
答:用下步骤可把电脑刷机:1、制作启动U盘,如大白菜U盘启动盘,然后将下载的系统iso文件直接复制到U盘的GHO目录下。2、在需要刷机的台式电脑上插入U盘,重启后不停按F12、F11、Esc等快捷键打...
- u盘装linux系统教程(u盘安装linux操作系统安装教程图解)
-
以制作Ubuntulinux系统为例:1、首先要下载Ubuntu系统,在搜索Ubuntu,打开Ubuntu官网。2、然后在下载那里,选择桌面版。3、选择好版本之后,点击下载。4、随后跳转到一个网页,...
- 系统软件卸载器下载(系统软件卸载器专业版)
-
小米手机清理安装包有两个方法:1.用安全中心清理,步骤如下:打开安全中心,点击垃圾清理点击右上角的手机瘦身屏幕滑到底部,有一个安装包清理2.用文件管理清理,步骤如下:打开文件管理,选择安装包...
- 电脑开机不了怎么弄(电脑开机不了怎么弄回来)
-
1、打开电脑,点击【开始】键,可以直接在桌面左下角点击,也可以点击键盘上的电源键;2、在跳出的菜单栏中点击【控制面板】;3、在【控制面板】页面中,找到【系统和安全】,并点击;4、找到操作中心页面,并点...
- root权限获取下载(root权限获取教程)
-
你好!一般的安卓系统的手机都是可以root的,不过root的方法是不一样的。1,一般的手机可以直接在手机上用手机上的root的软件就可以的,一些root工具都可以的等等。2,在就是小米类型的手机直接刷...
- 改ip地址的软件有哪些(改ip的软件真的有用吗)
-
没有绝对好用的IP修改器,ip修改器只有合适自己的才是最好的。因为IP修改器的使用环境不一样,每个ip修改器功能和特点不同,自己用途和范围选择合适的。比如,有些ip修改器适合修改ip地址,有的IP修改...
- 台式机安装系统步骤(绝尘侠台式机如何u盘安装系统)
-
中柏EZbookA13使用U盘重装系统:1、将u盘制作成【u启动u盘启动盘】,接着前往相关网站下载win系统存到u盘启动盘,重启电脑等待出现开机画面按下启动快捷键,选择u盘启动进入到主菜单,选取“【...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
python入门到脱坑 输入与输出—str()函数
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
慕ke 前端工程师2024「完整」
-
失业程序员复习python笔记——条件与循环
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
