唯一分解定理一篇就够了

如果与唯一定理一起应用需要用到素数筛,可以看这篇文章:
线性筛判断素数


唯一分解定理:

任何一个大于1的自然数 N,如果N不为质数,**那么N可以唯一分解成有限个质数的乘积:
在这里插入图片描述
这里P1<P2<P3…<Pn均为质数,其中指数ai是正整数。这样的分解称为 N 的标准分解式。

定理应用:

在这里插入图片描述
3.用唯一分解求a,b的gcd,lcm(ak,bk为质数的幂):

在这里插入图片描述

4.在不取mod的情况下,用唯一分解求组合数:
在这里插入图片描述

解释:

  1. 因子:如果a%b==0,就称b是a的因子,例如8的因子有: 1,2,4,8;
  2. 因数:假如a*b=c(a、b、c都是整数),那么我们称a和b就是c的因数。

用代码实现:

1.素数分解–欧拉筛(线性筛)

#define maxn 10000001
bool number[maxn+5];
ll prime[maxn/10];//素数不能开到1e7
int len;
void isprime()
{
    len=0;
    memset(number,true,sizeof(number));
    for(int i=2; i<=maxn; i++)
    {
        if(number[i])
            prime[len++]=i;
        for(int j=0; j<len&&prime[j]*i<=maxn; j++)
        {
            number[prime[j]*i]=false;
            if(i%prime[j]==0)
                break;
        }
    }
}

2.唯一分解定理:

int factor[10000];
void geta(ll n)//算ai等于多少(幂指数)
{
	memset(factor,0,sizeof(factor));
    int cas=0;
    for(int i=0;i<len&&prime[i]*prime[i]<=n;i++)
    {
        while(n%prime[i]==0)//这里不能改
        {
            factor[cas]++;
            n/=prime[i];
        }
        if(factor[cas])
            cas++;
    }
    if(n>1)//prime[i]*prime[i]<=nn当不满足这个条件的时候就应该还有一个素数的一次方
        factor[cas]=1;
}
int p[100001];
void getp(ll q)//筛出唯一分解定理的底数
{
	cnt = 0;
    for (int i = 2, x = q; (long long)i * i <= q; i++)//筛出q的p1,p2,p3...(唯一分解定理里面的底数)
        if (!(x % i))
        {
            p[++cnt] = i;
            while (!(x % i))
                x /= i;
        }
    //例如q=300000时,q=2^5*3^1*5^5,此时数组a中存储的元素是2,3,5,cnt=3;
    if (x > 1)  //如果最后x大于1,即最后产生了一个小的素数,直接保存即可
        p[++cnt] = x, x = 1;
}

前两天碰到的一道codeforces上的题:
C. Division–素数筛+唯一分解定理
Pairs Forming LCM LightOJ - 1236

侵删

  • 10
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
【1】项目代码完整且功能都验证ok,确保稳定可靠运行后才上传。欢迎下载使用!在使用过程中,如有问题或建议,请及时私信沟通,帮助解答。 【2】项目主要针对各个计算机相关专业,包括计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师或企业员工使用。 【3】项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 【4】如果基础还行,或热爱钻研,可基于此项目进行二次开发,DIY其他不同功能,欢迎交流学习。 【注意】 项目下载解压后,项目名字和项目路径不要用中文,否则可能会出现解析不了的错误,建议解压重命名为英文名字后再运行!有问题私信沟通,祝顺利! 基于联邦学习和深度残差网络实现的网络入侵检测python源码+实验说明.zip基于联邦学习和深度残差网络实现的网络入侵检测python源码+实验说明.zip基于联邦学习和深度残差网络实现的网络入侵检测python源码+实验说明.zip基于联邦学习和深度残差网络实现的网络入侵检测python源码+实验说明.zip基于联邦学习和深度残差网络实现的网络入侵检测python源码+实验说明.zip基于联邦学习和深度残差网络实现的网络入侵检测python源码+实验说明.zip基于联邦学习和深度残差网络实现的网络入侵检测python源码+实验说明.zip基于联邦学习和深度残差网络实现的网络入侵检测python源码+实验说明.zip基于联邦学习和深度残差网络实现的网络入侵检测python源码+实验说明.zip 基于联邦学习和深度残差网络实现的网络入侵检测python源码+实验说明.zip
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JdiLfc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值