• 数论知识


    转载于:http://blog.csdn.net/xieshimao/article/details/6425099

    断断续续的学习数论已经有一段时间了,学得也很杂,现在进行一些简单的回顾和总结。

    学过的东西不能忘啊。。。

    1、本原勾股数:

    概念:一个三元组(a,b,c),其中a,b,c没有公因数而且满足:a^2+b^2=c^2

    首先,这种本原勾股数的个数是无限的,而且构造的条件满足:

    a=s*t,b=(s^2-t^2)/2,c=(s^2+t^2)/2

    其中s>t>=1是任意没有公因数的奇数!

    由以上概念就可以导出任意一个本原勾股数组。

    2、素数计数(素数定理)

    令π(x)为1到x中素数的个数

    19世纪最高的数论成就就是以下这个玩意儿:

    lim(x->∞){π(x)/(x/ln(x))}=1

    数论最高成就,最高成就!!!有木有!!!

    3、哥德巴赫猜想(1+1)

    一个大偶数(>=4)必然可以拆分为两个素数的和,虽然目前还没有人能够从理论上进行证明,不过我根据科学家们利用计算机运算的结果,如果有一个偶数不能进行拆分,那么这个偶数至少是一个上百位的数!!

    所以在ACM的世界中(数据量往往只有2^63以下)哥德巴赫猜想是成立的!!所以拆分程序一定能够实现的

    4、哥德巴赫猜想的推广

    任意一个>=8的整数一定能够拆分为四个素数的和

    证明:

    先来说8=2+2+2+2,(四个最小素数的和)不能再找到比2小的素数了,所以当n小于8,就一定不可能拆分为四个素数的和!

    那么当n大于等于8,可以分情况讨论:

    (1)n&1==0(n为偶数),那么n就一定可以拆分为两个偶数的和

    那么根据哥德巴赫猜想,偶数可以拆分为两个素数的和,于是,n一定可以拆分为四个素数的和

    (2)n&1==1(n为奇数),n一定可以拆分为两个偶数+1

    由于有一个素数又是偶数,2,那么奇数一定有如下拆分:2+3+素数+素数

    得证。

    5、欧拉函数(欧拉公式)

    欧拉函数ph(n)的意思是所有小于n且与n互质的数的个数

    比如说ph(12)=4,[1,5,7,11与12互质]

    欧拉公式

    a^ph(m)=1(mod m)

    6、费马小定理

    费马小定理是欧拉公式的一种特殊情况

    由于当p为质数的时候ph(p)=p-1这是显然的

    那么带入欧拉公式就得到了费马小定理

    a^(p-1)=1(mod p)

    p为质数(prime)

    7、抽屉原理

    抽屉原理其实是废话,关键在于运用

    这句废话是说,如果现在有3个苹果,放进2个抽屉,那么至少有一个抽屉里面会有两个苹果,这个很废话。

    8、抽屉原理的运用

    抽屉原理本身只是一句废话,不过他的运用却非常强大

    现在假设有一个正整数序列a1,a2,a3,a4.....an,试证明我们一定能够找到一段连续的序列和,让这个和是n的倍数,该命题的证明就用到了抽屉原理

    我们可以先构造一个序列si=a1+a2+...ai

    然后分别对于si取模,如果其中有一个sk%n==0,那么a1+a2+...+ak就一定是n的倍数(该种情况得证)

    下面是上一种情况的反面,即任何一个sk对于n的余数都不为0

    对于这种情况,我们可以如下考虑,因为si%n!=0

    那么si%n的范围必然在1——(n-1),所以原序列si就产生了n个范围在1——(n-1)的余数,于是抽屉原理就来了,n个数放进n-1个盒子里面,必然至少有两个余数会重复,那么这两个sk1,sk2之差必然是n的倍数,

    而sk1-sk2是一段连续的序列,那么原命题就得到了证明了

    9、判断n!是否能够被m整除

    计算方法是把m进行质因数分解,看下m的每一个质因数是否能够在n!中找到;

    n!中间包含了多少个x(x是任意的一个数,不过一般情况下我们都只讨论x为质数),这种问题的答案是:
    n/x+n/(x^2)+n/(x^3).....[一直加到x的乘方不超过n],这个定理的证明也非常的简单,这里就不再赘述了

    根据以上观点,就可以分别计算m的每一个质因数是否被完全包含,如果有一个没有被包含,那么就不能被整除!

    10、因子和的计算方法

    神马叫因子和:一个数的所以因子的和就叫因子和。。。

    好吧,举个例子:12的因子和为:1+2+3+4+6+12

    计算方法是把12分解为质因数的表达形式2^2*3

    那么他的因子和就是:(1+2+2^2)*(1+3)

    证明写起来比较麻烦,大体上思路就是牛顿二项式。。。

    11、判断组合数C(n,m)的奇偶性

    有一个我也不知道证明的方法

    当n&m==m为奇数,反之就是偶数

    poj 2319

    复制代码
    /*
    * poj3219.c
    *
    * Created on: 2011-9-19
    * Author: bjfuwangzhu
    */

    #include<stdio.h>
    int main() {
    #ifndef ONLINE_JUDGE
    freopen("data.in", "r", stdin);
    #endif
    int n, k;
    while (~scanf("%d %d", &n, &k)) {
    puts((n & k) == k ? "1" : "0");
    }
    return 0;
    }
    复制代码

    杨辉三角 N行(N=0开始)的奇数的个数2^K(K为N的二进制中1的个数)

    某行全为奇数行为2^N-1(N=0开始)

    杨辉三角和素数

    hdu 3304 pku 3146

    来源于:http://blog.csdn.net/swordholy/article/details/5516352

    等价于C(n,m)%p==0求m的个数

    n!/(m!*(n-m)!)%p==0

    N!中p的因子个数等于m!与(n-m)!中的p的因子和

    即f(n) ==f(m)+f(n-m) //f(n)表示n!所含有的因子数 

    F(n)=n/p+n/(p^2)+....

    即:

    n/p+n/p^2+...=m/p+m/p^2+..+(n-m)/p+(n-m)/p^2+...  (1)

    又因为n/p^i>=m/p^i+(n-m)/p^i,

    所以等价于对任意i都有n/p^i =m/p^i+(n-m)/p^i (2)

    N=n/p^i*p^i+n%p^i(注意这里所有的除法都是整除)

    (2)两边都乘以p^i

     n-n%p^i=m-m%p^i+n-m+(n-m)%p^i

    n%p^i-m%p^i+(n-m)%p^i>=0

    又等价于 m%(p^i)<=n%(p^i) (3)对任意正整数i都成立。(//从2到3这个一步相当的重要,是本题的一个关键点)

    将n和m分别写成P进制数 n0,n1,n2,n3,n4,.... m0,m1,m2,m3,m4,....

    根据(3)可以由数学归纳法得到,对于任意位上的ni都大于等于mi 

     当i=0;显然成立

        假设i=k成立,当i=k+1时

         因为m%(p^k)<=n%(p^k)

          n(k+1)nk..n1=n(k+1)(nk%(p^k))(表示按p进制摆放)

    所以要保证n%(p^(k+1))>=m%(p^(k+1))

    必须保证最高位即n(k+1)>=m(k+1)

    即(3)成立的充要条件就是 m0<=n0, m1<=n1 .... 

    所以m的可取值个数就是(n0+1)*(n1+1)*(n2+1)......

    复制代码
    /*
    * hdu3304.c
    *
    * Created on: 2011-9-9
    * Author: bjfuwangzhu
    */

    #include<stdio.h>
    #define nmax 10000
    int main() {
    #ifndef ONLINE_JUDGE
    freopen("data.in", "r", stdin);
    #endif
    int P, N, res, cas;
    cas = 0;
    while (scanf("%d %d", &P, &N) != EOF,P || N) {
    res = 1;
    while (N) {
    res *= (N % P + 1);
    res %= nmax;
    N /= P;
    }
    printf("Case %d: %04d ", ++cas, res);
    }
    return 0;
    }
    复制代码

    12、中国剩余定理(孙子定理,韩信点兵,等等都是说的一个东西)

    这个问题处理的是同余方程

    假设

    x%a1=b1

    x%a2=b2

    x%a3=b3

    .....

    x%an=bn

    a,b必须互质,否则就不是中国剩余定理了

    我们可以先求一个M=a1*a2*a3*a4.....*an

    然后对于每一个方程都求一个顺元m

    m[i]=M/a[i]

    然后再求每一个方程的逆元re_m

    re_m[i]={m[i]^(ph(a[i])-1)}%a[i]

    最后我们可以得到的解就是x={sigma(re_m[i]*m[i]*b[i])}%M

    神马顺元,逆元的,虽然名字很高端,其实就那么回事,看懂了就行了

    就总结到这儿了。

    以前大一也总结过一片类似的,不过那时候之总结了一点关于欧几里得算法之类的。

                                                                                                                                                 ——bingshen

  • 相关阅读:
    Mongodb 插入数据的方式
    vue插槽(slot)的模板与JSX写法
    vue-resource+iview上传文件取消上传
    封装全局icon组件 svg (仿造element-ui源码)
    vue 修改框架less变量
    vue webpack多页面构建
    vue2 自定义全局组件(Loading加载效果)
    制作npm插件vue-toast-m实例练习
    iview+axios实现文件取消上传
    CSS Variables
  • 原文地址:https://www.cnblogs.com/acmtime/p/5732015.html
Copyright © 2020-2023  润新知