关于自然数集N到素数集P的一个单射的三种构造
来源:互联网 发布:java iterator 将int 编辑:程序博客网 时间:2024/06/06 13:08
昨天在给组织同学们上课讲simhash算法的时候考虑了如下问题:
如何判断如下两个自然数构成的集合
S_1=\{e_1,e_2....,e_n\}和S_2=\{b_1,b_2,...,b_n\}相同
其中提到假设构造hash函数F_e=\prod_{i=1}^n f(e_i)和F_b=\prod_{i=1}^n f(b_i)后是否能通过F_e和F_b是否相同来判定两个集合相同的问题的时候。文杰同学说只要映射到素数就可以了,这个想法看似是可以的。如今仔细一想,有点问题,假设e_i和b_i的取值是有限个自然数,那么没有问题,因为素数有无穷多个,但是假设取值是无穷多个呢(即整个自然数集N)?是否存在这样的映射f呢?更进一步是否存在自然数集N到素数集P的一一映射?素数是否是可数的?
经过了2+小时的思考似乎解决了这个问题,当然只是构造了自然数集N到素数集P的一个单射。需要部分抽象代数知识,下面是构造的过程:
引理1:设(a,m)=1,设k为模m的剩余类加群中元素a的阶,u,v是任意整数,那么a^u\equiv a^v (mod m)\Leftrightarrow u\equiv v (mod k)
引理1证明:
充分性:由已考虑带余除法u=pk+t,v=qk+t,p,q,t \in N,0\leq t \leq k.那么a^u\equiv a^{(pk+t)}\equiv a^{pk}\cdot a^t\equiv a^t (mod m),同理,a^v\equiv a^t (mod m),故充分性得证。
必要性:设l=u-v,考虑带余除法l=kq+r,0 \leq r < k.由于a^u\equiv a^v (mod m)且(a,m)=1所以有a^l \equiv 1 (mod m).故a^{kq}\cdot a^r \equiv 1(mod m),于是 a^r \equiv 1(mod m),又由于0 \leq r < k.,所以r=0.
综上引理1得证。
引理2:设p为奇素数,若2^p \equiv 1(mod q),那么2模q的阶为p
引理2证明:设q为2^p-1的一个素因子,那么考虑2模q的阶k,而2^p \equiv 1(mod q),故由阶的定义有k|p.注意到p为素数,所以k=1或者k=p,但k=1时代入2^p \equiv 1(mod q)知道矛盾!故k=p.
引理3:(费马小定理)若q为素数,那么有2^{q-1} \equiv 1 (mod q).
或者如下更强形式
(欧拉定理)若(a,n)=1,那么a^{\phi(n)}\equiv 1(mod n),具体可以参见《近世代数.张禾瑞.P97》
回到原问题,考虑梅森素数的形式,p为素数,2^p-1的素因子q取a_1=p.设2模q的阶为k,由引理2有k=p,由引理3和引理1有p|q-1,故q=px+1,x \in N,取a_2=q,注意到a_2=q=px+1>p=a_1,继续考虑梅森素数形式2^{a_2}-1的素因数便得到a_3….
如此构造便有单调素数列\{a_i\}.故完成自然数集N到素数集P的一个单射的构造。
——————————————————————
那么反过来呢?素数和自然数之间是否存在一一映射,实际上,这是非常大的问题,假设这个一一映射被构造出来,那么相当于得到了精确的素数公式,天啊,这是了不起的成就,当然我本人是相信这样的素数公式是不存在的,否则密码界计算机界有大麻烦。关于素数公式或者黎曼猜想的知识大家可以参见《素数之恋》。
补充两种构造:(思路泉涌系列)
二、利用伯特兰-切比雪夫定理:设n为大于1的自然数,那么n和2n之间必存在素数,那么只要构造区间[2,4],[4,8],...,[2^n,2^{n+1}],….即可以得到单调素数列。关于本定理的介绍可以参见下面的连接:
http://baike.baidu.com/link?url=6IAhYlc7tU1elPJZK0U7HDCORP9ZbVQyHcJW7Emli_Y6azulr63Wt2ZRzl4QPrGY9sM3iwJjmCODZtBn2kVEwa
三、上面的定理太高端了,但是可以利用他的思路来构造一个简单的证明!考虑一个给定的足够大的自然数n使得区间[1,n]至少有1个素数设为a_1,下面考察n!+1,若n!+1为素数,那么令a_2=n!+1,若为合数,那么由于(n!,n!+1)=1所以至少有两个素数在区间[n+1,n!+1]之间,取小的为a_2,继续考虑(n!+1)!+1,得到a_3....,如此便得到互不相同的单调素数列。
- 关于自然数集N到素数集P的一个单射的三种构造
- 关于自然数的一个题目
- 给你一个自然数N,求[6,N]之内的所有素数中,两两之和为偶数的那些偶数。
- 给你一个自然数N,求[6,N]之内的所有素数中,两两之和为偶数的那些偶数
- 关于一道1到N自然数排序的华为面试题
- 也谈关于一道1到N自然数排序的华为面试题
- 关于一道1到N自然数排序的华为面试题
- (转)关于一道1到N自然数排序的华为面试题
- 算法题:给你一个自然数N,求[6,N]之内的所有素数中,两两之和为偶数的那些偶数。
- 给你一个自然数N,求[6,N]之内的所有素数中,两两之和为偶数的那些偶数(百度2014,面试)
- [经典面试题]给你一个自然数N,求[6,N]之内的所有素数中,两两之和为偶数的那些偶数
- 算法题:给你一个自然数N,求[6, N]之内的所有素数中, 两两之和为偶数的那些偶数。
- 百度笔试算法题:算法题:给你一个自然数N,求[6,N]之内的所有素数中,两两之和为偶数的那些偶数。
- 1-N互不相等的自然数,缺少一个找出来
- 生成前N个自然数的一个随机置换
- 一个正整数n被分成若干个不同自然数的和,求组成n的一组自然数的最大乘积
- 求素数,给你一个n,输出n以内的素数
- C(n,k)中素数P的问题
- Nginx+Resin高性能Java平台搭建
- [学习笔记】Java Numbers类与Math类
- Codeforces Round #342 (Div. 2) A D题
- 填算式(使用全排列处理)
- (LeetCode 234)Palindrome Linked List
- 关于自然数集N到素数集P的一个单射的三种构造
- Java开发文档的使用与Hashcode的入门(老鸟勿进)
- 【杭电-oj】-2016- 数据的交换输出(一组排序,一组存原值,再交换位置)
- HTML常用代码
- 线程池的原理和创建
- CodeForces 598D 【dfs+技巧省时】
- cookie 相关
- 使用spring webflow遇到的问题-3
- win7+vc6配置win32 gdi+