1.2. 研究离散系统的代数类

属于这一类的如数论、近世代数。
数论是研究整数性质的一门学科。按研究方法的不同,大致可分为初等数论、代数数论、几何数论、解析数论等。近世代数是把代数学的对象由数扩大为向量、矩阵等,它研究更为一般的代数运算的规律和性质,它讨论群、环、向量空间等的性质和结构。近世代数有群论、环论、伽罗华理论等分支。它在分析数学、几何、物理学等学科中有广泛的应用。

数论

数论四大定理

威尔逊定理、欧拉定理、孙子定理、费马小定理并称数论四大定理。

1、威尔逊定理

若p为质数,则p可整除(p-1)!+1。
如:7为质数,则7可整除(7 - 1)! + 1 = 721,即721 % 7 == 0。

2、欧拉定理

在数论中,欧拉定理(Euler Theorem,也称费马-欧拉定理或欧拉函数定理)是一个关于同余的性质。欧拉定理得名于瑞士数学家莱昂哈德·欧拉,该定理被认为是数学世界中最美妙的定理之一。欧拉定理实际上是费马小定理的推广。此外还有平面几何中的欧拉定理、多面体欧拉定理(在一凸多面体中,顶点数-棱边数+面数=2)。西方经济学中欧拉定理又称为产量分配净尽定理,指在完全竞争的条件下,假设长期中规模收益不变,则全部产品正好足够分配给各个要素。另有欧拉公式。

欧拉定理,也称费马-欧拉定理或欧拉函数定理。欧拉定理实际上是费马小定理的推广。
若n,a为正整数,且n,a互素,即gcd(a,n) = 1,则a^φ(n) ≡ 1 (mod n), 其中φ(n)为欧拉函数。
如:n = 5, a = 7. 因为与5互质的有1、2、3、4,即φ(5) = 4,则(7 ^ 4) % 5 = 2401 % 5 = 1。

欧拉函数
在数论,对正整数n,欧拉函数是小于n的正整数中与n互质的数的数目(φ(1)=1)。此函数以其首名研究者欧拉命名(Euler’so
totient function),它又称为Euler’s totient function、φ函数、欧拉商数等。
例如φ(8)=4,因为1,3,5,7均和8互质。 从欧拉函数引伸出来在环论方面的事实和拉格朗日定理构成了欧拉定理的证明。

通式

φ(x) = x (1 - 1/p1) … * (1 - 1/pn)

其中p1, p2……pn为x的所有质因数,x是不为0的整数。
φ(1)=1(唯一和1互质的数(小于等于1)就是1本身)。
注意:每种质因数只一个。 比如12=223那么φ(12)=12(1-1/2)(1-1/3)=4

特例

若n是质数p的k次幂,

,因为除了p的倍数外,其他数都跟n互质。

设n为正整数,以 φ(n)表示不超过n且与n互素的正整数的个数,称为n的欧拉函数值
φ:N→N,n→φ(n)称为欧拉函数。
欧拉函数是积性函数——若m,n互质,

特殊性质:当n为奇数时,

, 证明与上述类似。

若n为质数,则 φ(n) = n - 1 ,如11,1、2、3、4、5、6、7、8、9、10都是与11互质的数。
//质数的快速求法
利用辛达拉姆筛进行素数判定

因数数的快速求法
//因数数的快速求法,时间复杂度根号n。

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    int n;
    while(cin >> n) {
        int temp = sqrt(n);
        for(int i = 1; i < temp; i++) {
            if(n % i == 0) {
                cout << i << ' ' << n / i << ' ';
            }
        }
        if(temp * temp == n) cout << temp;
        cout << endl;
    }
    return 0;
}

质因数的快速求法
//质因数的快速求法

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    int n;
    while(cin >> n) {
        //Pollard Rho因数分解,时间复杂度是n^0.25?不是n
        for(int i = 2; i <= n; i++) {
            if(n % i == 0) cout << i << ' ';
            while(n % i == 0) n /= i;
        }
        cout << endl;
    }
    return 0;
}

欧拉函数
//欧拉函数

#include <iostream>
#include <cmath>
using namespace std;

int gcd(int a, int b)
{
    return b ? gcd(b, a % b) : a;
}

int eular(int n)
{
    int ret=1,i;
    for(i=2;i*i<=n;i++)
    {
        if(n%i==0)
        {
            n/=i,ret*=i-1;
            while(n%i==0) n/=i,ret*=i;
        }
    }
    if(n>1) ret*=n-1;
    return ret;
}

/*线性筛O(n)时间复杂度内筛出maxn内欧拉函数值*/
int m[maxn],phi[maxn],p[maxn],pt;//m[i]是i的最小素因数,p是素数,pt是素数个数

int make()
{
    phi[1]=1;
    int N=maxn;
    int k;
    for(int i=2;i<N;i++)
    {
        if(!m[i])//i是素数
            p[pt++]=m[i]=i,phi[i]=i-1;
        for(int j=0;j<pt&&(k=p[j]*i)<N;j++)
        {
            m[k]=p[j];
            if(m[i]==p[j])//为了保证以后的数不被再筛,要break
            {
                phi[k]=phi[i]*p[j];
/*这里的phi[k]与phi[i]后面的∏(p[i]-1)/p[i]都一样(m[i]==p[j])只差一个p[j],就可以保证∏(p[i]-1)/p[i]前面也一样了*/
                break;
            }
            else
                phi[k]=phi[i]*(p[j]-1);//积性函数性质,f(i*k)=f(i)*f(k)
        }
    }
}

int main()
{
    int n;
    while(cin >> n) {
        //小于n的正整数中与n互质的数的数目
        int cnt = 0;
        for(int i = 1; i < n; i++) {
            if(gcd(i, n) == 1) cnt++;
        }
        cout << cnt << endl;

        //根据通式计算
        int ans = n;
        for(int i = 2; i <= n; i++) {
            if(n % i == 0) {
                ans = (ans / i) * (i - 1);
            }
            while(n % i == 0) n /= i;
        }
        cout << ans << endl;
    }
    return 0;
}

3、孙子定理

孙子定理,又称中国剩余定理。孙子定理是中国古代求解一次同余式组(见同余)的方法。是数论中一个重要定理。又称中国余数定理。一元线性同余方程组问题最早可见于中国南北朝时期(公元5世纪)的数学著作《孙子算经》卷下第二十六题,叫做“物不知数”问题,原文如下:
有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?即,一个整数除以三余二,除以五余三,除以七余二,求这个整数。《孙子算经》中首次提到了同余方程组问题,以及以上具体问题的解法,因此在中文数学文献中也会将中国剩余定理称为孙子定理。
公元前后的《孙子算经》中有“物不知数”问题:“今有物不知其数,三三数之余二 ,五五数之余三 ,七七数之余二,问物几何?”答为“23”。
明朝程大位用歌谣给出了该题的解法:“三人同行七十稀,五树梅花廿一枝,七子团圆月正半,除百零五便得知。”
以现代的说法,是找出三个关键数70,21,15。解法的意思就是用70乘3除所得的余数,21乘5除所得的馀数,15乘7除所得的余数,然後总加起来,除以105的余数就是答案。

4、费马小定理

假如p是质数,若p不能整除a,则 a^(p-1) ≡1(mod p),若p能整除a,则a^(p-1) ≡0(mod p)。
若p是质数,且a,p互质,那么 a的(p-1)次方除以p的余数恒等于1。
证明:
因为p是质数,且(a,p)=1,所以φ(p)=p-1。由欧拉定理可得a^(p-1) ≡1(mod p)。证毕。对于该式又有a^p ≡a(mod p),所以,费马小定理的另一种表述为:假如p是质数,且gcd(a,p)=1,那么a^p ≡a(mod p)。
欧拉定理,也称费马-欧拉定理或欧拉函数定理。欧拉定理实际上是费马小定理的推广。

posted @ 2022-03-02 13:35  hucat  阅读(278)  评论(0)    收藏  举报