算术基本定理(唯一分解定理)

算术基本定理:

每个大于1的正整数N都可以表示成素数之积的形式 :

 N=p1^a1*p2^a2*p3^a3...(pi代表素数,ai代表指数)

d(n)是n的正因子的个数:

d(n)=(a1+1)*(a2+1)*(a3+1)…

Sum(n)是n的所有因子之和:

Sum(n)=(1+p1+p1^2+…+p1^a1)*(1+p2+p2^2+……+p2^a2)*….

 

  #include
  #define MAXN 1e5
  int N;
  bool isprime[MAXN];
  int prime[MAXN];//1-N中的素数
  int cnt=0;//记录1-N中素数的个数
  struct node
  {
    int p;
    int num;
    node() {p=0;num=0;}
  } a[MAXN];
  int m=0;//素数组元素个数
  
  void init()  //寻找1-N中的所有素数(埃氏筛)
  {
       memset(isprime,true,sizeof isprime);
       for(int i=2;i<=N;i++)
       {
           if(isprime[i])
           {
               prime[cnt++]=i;
               for(int j=i;i*j<=N;j++)
                  isprime[i*j]=false;
           }
       }
  }
  
  void solve(int N)  //算术基本定理分解N
  {
      m=0;
      for(int i=0;i

 

不进行素数打表

void solve(int n)
{
    num=0;
    for(int i=2;i*i<=n;i++)
    {
        if(n%i==0)
        {
            P[num++]=i;
            while(n%i==0)    n/=i;
        }
    }
        if(n>1)
            P[num++]=n;
}

 

你可能感兴趣的:(算术基本定理(唯一分解定理))