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

本文介绍算术基本定理,并演示了如何利用该定理将一个正整数分解为素数的乘积形式。此外还提供了C++代码实现素数筛选和整数分解的具体方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

算术基本定理:

每个大于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<bits/stdc++.h>
  #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<cnt;i++)
      {
          if(N%prime[i]==0)
          {
              while(N%prime[i]==0)
              {
                  a[m].p=prime[i];
                  a[m].num++;
                  N/=prime[i];
              }
              m++;
          }
      }
  }

 

不进行素数打表

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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值