zoukankan      html  css  js  c++  java
  • 数论:质数理论整理

    1.质数的判定:

      筛选法:

     1 void prime()
     2 {int k=0,i,j;
     3 memset(vis,0,sizeof(vis));
     4   for (i=2;i<=n;i++)
     5    if (vis[i]==0 6     {
     7       k++;
     8        prime[k]=i;
     9         for (j=i*i;j<=n;j+=i)
    10          prime[j]=1;
    11     }
    12 }    

    复杂度为O(nlogn)

    但还有更快的,就是线性筛法:

     1 for (i=2;i<=2*n;i++)
     2 {
     3     if (vis[i]==0)
     4     {
     5         prime[++tot]=i;
     6     }//关键1
     7         for (j=1;j<=tot&&i*prime[j]<=2*n;j++)
     8         {
     9          vis[i*prime[j]]=1;
    10          mp[i*prime[j]]=prime[j];
    11          if (!(i%prime[j])) break;// 关键2   
    12         }
    13 }

    2.质数相关定理:

    1.唯一分解定理:

    假设a>=2,则a可表示为p1*p2*p3*p4....

    2.威尔逊定理:

    设p为质数,则( p - 1 ) ! ≡ -1 ( mod p )

    反之亦然:如果( p - 1 ) ! ≡ -1 ( mod p ),则p为质数

    所以(p-1)+1=k*p,k为整数,利用sin函数,构出分布曲线f(n)=sin(3.1415926 * ( ( n - 1 ) ! + 1 ) / n ).

    零点为质数

    3.费马定理:

    如果p为质数,a为正整数,且GCD(a,p)==1,则ap-1≡1( mod p )

    在一般情况下,如果p为质数,则a≡ a ( mod p )

    a无限制,这就是费马小定理

    3.欧拉定理:

    欧拉函数:不大于n中与n互质的数的个数,称为Φ(n)函数

    引理1:

    n为质数p时,Φ(p)=p-1

    n为质数p的幂,则Φ(pa)=(p-1)*pa-1

    n为互质两数a,b之积,Φ(a*b)=Φ(a)*Φ(b)

    引理2:

    设n=p1^a1*p2^a2*p3^a3....

    则Φ(n)=n*(1-1/p1)*(1-1/p2)*(1-1/p3)...

    欧拉定理:

    aΦ(n) ≡ 1 ( mod n )

    5.欧拉函数的线性筛法:

    设p为质数

    性质1:

    Φ(p)=p-1

    性质2:

    如果i%p=0,则Φ( p * i )=Φ( i )*p

    性质3:

    如果i%p<>0,则Φ(i * p)=Φ( i ) * ( p - 1 )

    这样可以用质数线性筛法顺带求出Φ(n)

     1 for (i=2;i<=n;i++)
     2     {
     3         if (mark[i]==0)
     4         {
     5             prime[++tot]=i;
     6             phi[i]=i-1;
     7         }
     8          for (j=1;j<=tot;j++)
     9          {
    10             long long k=i*prime[j];
    11                      if (k>n) break;
    12                       mark[k]=1;
    13                       if (i%prime[j]==0)
    14                         {
    15                             phi[k]=phi[i]*prime[j];
    16                             break;
    17                         }
    18                    else phi[k]=phi[i]*(prime[j]-1);
    19             }
    20     }

    先到这里,接下来还有BSGS及扩展算法,Pollard Rho求大数因子

  • 相关阅读:
    线性判别分析(LDA)
    奇异值分解(SVD)
    傅里叶变换
    SVM 之非线性支持向量机
    三角函数常用公式
    协方差、样本协方差和协方差矩阵
    方差和样本方差
    SVM 之线性支持向量机
    参考资料汇总
    QObject: Cannot create children for a parent that is in a different thread
  • 原文地址:https://www.cnblogs.com/Y-E-T-I/p/7118312.html
Copyright © 2011-2022 走看看