matlab 素数积,素数之美1:所有素数之积
在之前的欧拉数学中,我们计算过所有素数的倒数之和,得出素数的倒数之和是发散的,从而这也是一个关于素数个数为无穷的证明。在本篇文章中,我们尝试计算所有素数之积,通过一个简单的技巧,得到素数之积的一个上限(以后我们也会计算下限),从而也得到$\pi(n)$的一个上限公式。更重要的,该估计是初等地证明Bertrand假设(说的是n与2n之间定有一个素数)的重要基础之一。本文内容部分参考自《数学天书中的证明》和《解析和概率数论导引》。
素数之积
笔者已经说过,数论的神奇之处就是它总是出人意料地把数学的不同领域联系了起来。读者很快就可以看到,本文的证明和组合数学有重要联系(但仅仅是简单的联系)。关于素数之积,我们有以下结论:不超过$n$的所有素数之积小于$4^{n-1}$。
如果用$p$来表示素数,那么可以记为$\prod\limits_{p\leq n}p < 4^{n-1}$。事实上,由更深入的技巧可以大大改进该估计,因为由素数定理知$\pi(n)\sim \frac{n}{\ln n}$,从而$\prod\limits_{p\leq n}p \sim e^n$,也就是说,对于任意$\varepsilon > 0$,存在$N(\varepsilon) > 0$,使得对于任意的$n > N(\varepsilon)$,都有$\prod\limits_{p\leq n}p < (e+\varepsilon)^n$。但是,本文所采用的方法和估计都是比较简单的,所以只能够得到上限$4^n$,但之后读者就可以发现,对于证明Betrand假设来说,这个估计足够了。
下面我们开始证明它。可以检验,对于n=2该结论是成立的。而一个很显然的事实是,如果该估计对于奇数n都成立,那么它对偶数n+1必然成立。所以我们只证明$n=2m+1$时成立。我们采用数学归纳法,假设$n=1,2,\dots,2m$时,该结论都成立,于是我们将$n=2m+1$时分拆成两部分
$$\prod_{p\leq 2m+1}p=\prod_{p\leq m+1}p\prod_{m+1 < p\leq 2m+1}p < 4^m\prod_{m+1 < p\leq 2m+1}p$$
最后一个不等号是由归纳假设得到的。现在还差一部分,即m+1到2m+1之间的素数之积,我们考虑二项式系数
$$C_{m+1}^{2m+1}=\binom{2m+1}{m+1}=\frac{(2m+1)!}{(m+1)! m!}$$
由定义知$C_{m+1}^{2m+1}$是一个整数,并且它能够被大于m+1、小于等于2m+1的所有素数整除,所以显然
$$\prod_{m+1 < p\leq 2m+1}p\leq C_{m+1}^{2m+1}$$
而对$C_{m+1}^{2m+1}$进行估计就会发现
$$C_{m+1}^{2m+1} \leq 2^{2m}=4^m$$
这是因为$C_{m+1}^{2m+1}=C_{m}^{2m+1}$,且
$$C_{m+1}^{2m+1}+C_{m}^{2m+1}\leq \sum_{k=0}^{2m+1}C_{k}^{2m+1}=2^{2m+1}$$
指数4是最优的,如果不改变估计的方法,从该二项式系数中无法得到更好的指数。为了认识到这一点,只需要用String公式对$C_{m+1}^{2m+1}$进行渐进近似计算。
有了对$C_{m+1}^{2m+1}$的估计,那么就有
$$\prod_{p\leq 2m+1}p< 4^m\prod_{m+1 < p\leq 2m+1}p\leq 4^{2m}$$
也就是说,结论对于$n=2m+1$成立。从而由归纳假设知,该结论对于所有的正整数都成立。
素数个数
有了这个估计,我们还可以给出$\pi(n)$的一个上限,只需要注意到
$$t^{\pi(n)-\pi(t)} < \prod_{p\leq n}p < 4^{n-1}$$
$t$是任意常数,两边取对数得
$$\pi(n) < \frac{(n-1)\ln 4}{\ln t}+\pi(t)\leq \frac{n\ln 4}{\ln t}+t$$
在数论中,为了改进估算结果,通常是这样的思路,引入一些未知参数,比如上面的t,然后通过调整未知参数来得到最优估计。比如上面的不等式,我们设$f(t)=\frac{(n-1)\ln 4}{\ln t}+t$,求它的最小值:
$$f'(t)=-\frac{n\ln 4}{(\ln t)^2 t}+1$$
令导数为0,得到$n\ln 4=(\ln t)^2 t$,这是一道超越方程,没有办法得到显式精确解,通过迭代可以给出近似解,改成
$$t_{k+1}=\frac{n\ln 4}{(\ln t_k)^2}$$
取$t_0=n$,迭代一次得到$t_1=\frac{n\ln 4}{(\ln n)^2}$,为了不得到复杂的解,我们的迭代到此结束,并且简单起见,省去因子$\ln 4$,即简单地取$t=n/(\ln n)^2$,代入并整理得到
$$\pi(n) < \left(\ln 4+\frac{8\ln\ln n}{\ln n}\right)\frac{n}{\ln n}$$
该估计弱于素数定理很多,但它是基于最简单的计数的结果,足可满意。
更详细的转载事宜请参考:《科学空间FAQ》
如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。
如果您觉得本文还不错,欢迎分享/打赏本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!
打赏
微信打赏
支付宝打赏
因为网站后台对打赏并无记录,因此欢迎在打赏时候备注留言。你还可以点击这里或在下方评论区留言来告知你的建议或需求。
如果您需要引用本文,请参考:
苏剑林. (Jul. 30, 2014). 《素数之美1:所有素数之积 》[Blog post]. Retrieved from https://spaces.ac.cn/archives/2789
matlab 素数积,素数之美1:所有素数之积相关推荐
- 寻找孪生素数(当p为素数时,p+2也为素数)
数学家希尔伯特在1900年国际数学家大会的报告上提出一个"孪生素数猜想",即: 存在无穷多个素数p,使得p + 2是素数.p和p+2这一对差为2的素数,被称为"孪生素数& ...
- Java黑皮书课后题第10章:*10.6(显示素数)编写一个程序,然后按降序显示小于120的所有素数。使用StackOfIntegers类存储这些素数,获取之后按逆序显示它们
*10.6(显示素数) 题目 程序说明 代码 Test6.java Test6_StackOfIntegers.java 运行实例 题目 *10.6(显示素数)编写一个程序,然后按降序显示小于120的 ...
- Java黑皮书课后题第6章:**6.26(回文素数)回文素数是指一个数同时为素数和回文数。编程程序,显示前100个回文素数,每行显示10个数,数字中间用一个空格隔开
6.26(回文素数)回文素数是指一个数同时为素数和回文数.编程程序,显示前100个回文素数,每行显示10个数,数字中间用一个空格隔开 题目描述与运行示例 代码 题目描述与运行示例 6.26(回文素数) ...
- 我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推。 现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数
我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推. 现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的和,包括第n ...
- 题目;我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推现在,给定两个整数n和m,你的程序要计算第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素
题目内容: 我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推. 现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的 ...
- 我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推。 现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素
题目内容: 我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推. 现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的 ...
- 我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推。
题目内容: 我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推. 现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的 ...
- 素数和(5分) 题目内容: 我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推。 现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的
素数和(5分) 题目内容: 我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推. 现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数 ...
- 我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推。现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数
#include<stdio.h> int main() {int n, m;//从n到m的素数int i, x = 2;//i是素数判断,x是素数int count;//统计第几个素数了 ...
- 求素数(质数)的方法(求100以内的素数及判断该数是否为素数)
"素数,也是质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数." 求素数的方法: (1)从2~x-1测试是否可以整除 (2)去掉偶数之后,从3~x-1,每次加2 ...
最新文章
- windows主机用scp命令向Linux服务器上传和下载文件
- 如何高效地去调试UGUI的源码
- java中向JTextArea中添加滚动条(垂直的和水平的)
- 处理文件和文件夹的模块---os
- boost::function_types::is_member_object_pointer的用法测试程序
- linux系统命令make、clean、distclean的用法讲解
- CodeForces - 965E Short Code (字典树上贪心)
- Mysql带返回值与不带返回值的2种存储过程
- P4590 [TJOI2018]游园会 dp套dp + 状态机
- 前端学习(2390):登录模块介绍
- SpringCloud的学习记录(1)
- android 打开闪光灯,Android 闪光灯的打开和关闭
- mpandroidchart 设置x轴数据_跟小白学Python数据分析——绘制条形图
- DPDK DPVS 笔记 -> 基本框架整理
- Nexus下载网盘地址,免费哦,烦要币的
- linux tar命令将压缩包解压到指定位置,用tar命令把目标压缩包解压到指定位置
- Android应用测试篇
- Apollo - 阿波罗配置中心使用,一文搞定!
- 拼团小程序源码_拼团软件微信拼团小程序拼团卖水果、让您快速引流
- 学习二叉树必须知道的基本性质