zoukankan      html  css  js  c++  java
  • 数论的一点前置知识

    1。唯一分解定理

      总体有三种,这里只说一种,整数的唯一分解定理。

      整数惟一分解定理亦称算术基本定理,是数论的重要定理之一。该定理断言:任何一个大于1的整数n都可以分解成若干个素因数的连乘积,如果不计各个素因数的顺序,那么这种分解是惟一的,即若n>1,则有

    n = p1*p2*…*pm (1)

      其中p1≤p2≤…≤pm并满足皆为素数,可以化简为下面的式子:

     

    其中,p1<p2<…<pk皆素数,αi(i=1,2,…,k)皆正整数,(2) 式称为n的标准分解式,又称为质因数分解式、素数幂分解式等,若(2)式成立,则n的任一正因数d都可表成

     
     
     
    的形式,其中αi≥βi≥0 (i=1,2,…,k).利用标准分解式(可查素数幂分解表)容易写出任二正整数的最大公因数.即若有 其中αi≥0,βi≥0 (i=1,2,…,k),则gcd
      
    ,这里ri=min(αi,βi) (i=1,2,…,k)。
    把一个给定的充分大的整数分解成它的标准分解式,不仅具有理论意义,而且具有实际应用价值,但这是一个十分困难的工作,即使借助于电子计算机也要花费惊人的时间,算术基本定理早在欧几里得(Euclid)的《几何原本》第9卷命题20中已有陈述,1801年,高斯(C.F.Gauss)又重新提出,并给出证明。

     

    2。质因数

      质因数(素因数或质因子)在数论里是指能整除给定正整数质数。除了1以外,两个没有其他共同质因子的正整数称为互质。因为1没有质因子,1与任何正整数(包括1本身)都是互质。只有一个质因子的正整数为质数。

    3。分解质因数

      把一个合数分解成若干个质因数的乘积的形式,即求质因数的过程叫做分解质因数。
    分解质因数只针对合数。(分解质因数也称分解素因数)求一个数分解质因数,要从最小的质数除起,一直除到结果为质数为止。分解质因数的算式叫短除法,和除法的性质差不多,还可以用来求多个个数的公因式
    代码实现:
    #include "bits/stdc++.h"
    using namespace std;
    typedef long long ll;
    int main()
    {
        ll n,i;
        printf("please input a number:
    ");
        cin>>n;
        cout<<n<<"=";
        for(i=2;i<=n;i++)
        while(n!=i)
        {
            if(n%i==0)
            {
                printf("%lld*",i);
                n=n/i;
            }
            else
                break;
        }
        printf("%lld
    ",n);
        return 0;
    }

    上述方法为:Pollard Rho因数分解

    1975年,John M. Pollard提出了第二种因数分解的方法,Pollard Rho快速因数分解。该算法时间复杂度为O(n^(1/4))。
     
    将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
    程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: 
    (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
    (2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,
     重复执行第一步。
    (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
     
    对于大数的处理,我们可以使用素数表。
    a[0]=0;
    int prim_reduce(int n) //整数素分解
    {
        for(int i = 0; prim[i] * prim[i] <= n; ++i)
        {
            while(n % prim[i] == 0)
            {
                n /= prim[i];
                a[++a[0]]=pri[i];
            }
        }
        if(n > 1)
            a[++a[0]]=pri[i];
    }

    4。约数定理个数

    对于一个大于1正整数n可以分解质因数
     
    则n的正约数的个数就是
      
    其中a1、a2、a3…ak是p1、p2、p3,…pk的指数。

     

  • 相关阅读:
    12-14面向对象--抽象基类、接口、委托
    关于 try catch catch
    C# using 三种使用方式
    互斥锁(Mutex)
    C#中Monitor类、Lock关键字和Mutex类
    System.Data.SQLite
    Dictionary<TKey, TValue> 类
    AttributeTargets 枚举
    C# is和as操作符
    合并委托(多路广播委托)
  • 原文地址:https://www.cnblogs.com/ztdf123/p/10932135.html
Copyright © 2011-2022 走看看