数论记录

来源:互联网 发布:泛泰主义知乎 编辑:程序博客网 时间:2024/06/05 15:34

本文主要记录数论相关的知识点

1、欧几里德算法(辗转相除法

2、欧拉函数

10、弃九法


1、欧几里德算法(辗转相除法)

主要用于计算两个正整数的最大公约数,具体操作步骤如下:

设两数为a、b(a>b),求a和b最大公约数(a,b)的步骤如下:用a除以b,得a÷b=qr(0≤r1)。若r=0,则(a,b)=b;若r≠0,则再用b除以r,得b÷r=qr(0≤r).若r=0,则(a,b)=r,若r≠0,则继续用r除以r,如此下去,直到能整除为止。其最后一个为被除数的余数的除数即为(a, b)。

代码:

int GCD(int a,int b){  return b==0?a:GCD(b,a%b);}

练习题目:

http://acm.nyist.net/JudgeOnline/problem.php?pid=40

http://acm.nyist.net/JudgeOnline/problem.php?pid=556


2、欧拉函数

欧拉函数是小于n的正整数中与n互质的数的数目。它又称为Euler's totient function、φ函数、欧拉商数。 例如φ(8)=4,因为1,3,5,7均和8互质。

欧拉函数的一些性质:

1.对于素数p, φ(p)=p-1,对于对两个素数p,q φ(pq)=pq-1

欧拉函数是积性函数,但不是完全积性函数.

证明:


函数的积性即:若m,n互质,则φ(mn)=φ(m)φ(n).由“m,n互质”可知m,n无公因数,所以φ(m)φ(n)=m(1-1/p1)(1-1/p2)(1-1/p3)…(1-1/pn)·n(1-1/p1')(1-1/p2')(1-1/p3')…(1-1/pn'),其中p1,p2,p3...pn为m的质因数,p1',p2',p3'...pn'为n的质因数,而m,n无公因数,所以p1,p2,p3...pn,p1',p2',p3'...pn'互不相同,所以p1,p2,p3...pn,p1',p2',p3'...pn'均为mn的质因数且为mn质因数的全集,所以φ(mn)=mn(1-1/p1)(1-1/p2)(1-1/p3)…(1-1/pn)(1-1/p1')(1-1/p2')(1-1/p3')…(1-1/pn'),所以φ(mn)=φ(m)φ(n).

即φ(mn)=φ(n)*φ(m)只在(n,m)=1时成立.

2.对于一个正整数N的素数幂分解N=P1^q1*P2^q2*...*Pn^qn.

φ(N)=N*(1-1/P1)*(1-1/P2)*...*(1-1/Pn).

3.除了N=2,φ(N)都是偶数.

4.设N为正整数,∑φ(d)=N (d|N),即n的约数的欧拉函数之和等于n.

根据性质2,我们可以在O(sqrt(n))的时间内求出一个数的欧拉函数值.

如果我们要求1000000以内所有数的欧拉函数,怎么办.

上面的方法复杂度将高达O(N*sqrt(N)).

我们来看看线性筛法的程序:

//直接求解欧拉函数  int euler(int n){ //返回euler(n)        int res=n,a=n;       for(int i=2;i*i<=a;i++){           if(a%i==0){               res=res/i*(i-1);//先进行除法是为了防止中间数据的溢出                while(a%i==0) a/=i;           }       }       if(a>1) res=res/a*(a-1);       return res;  }  
练习题目:

http://poj.org/problem?id=2407

http://poj.org/problem?id=1284

http://poj.org/problem?id=2478

http://poj.org/problem?id=3090


10、弃九法

①弃九数把一个数的各位数字相加,直到和是一个一位数(和是9,要减去9得0)。(123的弃九数是6,48的弃九数是3)

②验证加法、减法、乘法。除法就利用逆运算:乘法

加法:被加数 + 加数 = 和=>被加数的弃九数 + 加数的弃九数 = 和的弃九数
减法:被减数 - 减数 = 差 => 被减数的弃九数 - 减数的弃九数 = 差的弃九数 
乘法:被乘数 * 乘数 = 积 => 被乘数的弃九数 * 乘数的弃九数 = 积的弃九数

③局限性:弃九数验证是验证四则运算的充分不必要条件。也就是说运算正确,则弃九数相同;但是弃九数相同不代表运算正确

练习题目:

http://acm.nyist.net/JudgeOnline/problem.php?pid=485


原创粉丝点击