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

定义:任何一个大于1的自然数

   
,都可以唯一分解成有限个质数的乘积
   
,这里
   
均为质数 ,其诸指数
   
是正整数。——百科

我们知道了唯一分解定理后有什么用呢

应用一:N的因子个数就为 

应用二:N的因子和为 

对N进行分解时我们要先打个素数表打到√N就够了,然后用试除法来枚举N的因子,时间复杂度为O(√N)

const int maxn=1000005;
bool vis[11000001];
int vis1[1000001];
long long prim[maxn],an[maxn];
int p;
void getprim()//素数打表
{
    memset(vis,true,sizeof(vis));
    long long t=0;
    for(int i=2; i<=11000001; i++)
    {
        if(vis[i])
            prim[t++]=i;
        for(int j=0; j<t&&prim[j]*i<=11000001; j++)
        {
            vis[i*prim[j]]=false;
            if(i%prim[j]==0)
                break;
        }
    }
}
void phi(long long n)
{
    long long sum=1,ans,m;
    m=n;
    p=0;
    for(int i=0; prim[i]*prim[i]<=n; i++)//试除法找因子
    {
        if(n%prim[i]==0)
        {
            ans=0;
            while(n%prim[i]==0)
            {
                ans++;
                n/=prim[i];
            }
            an[p++]=ans;//an数组存的是指数
        }
    }
    if(n>1)//若因子都找完了要么是1,要么他本身是质数
    {
        ans=0;
        while(m%n==0)
        {
            ans++;
            m/=n;
        }
        an[p++]=ans;
    }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值