唯一分解定理及其推论

唯一分解定理:
任意一个正整数,都可以分成有限个素数的乘积形式
没错,这就是核心,短叭?

例如:48 = 2 * 2 * 2 * 2 * 3,54 = 2 * 3 * 3 * 3。

唯一分解定理推论:
根据分解过后的质因子种类及其个数能推出这个数有多少个因子
如:上述48 = 2 * 2 * 2 * 2 * 3 = 2^4 * 3^1
其因子数就为(4+1) * (1+1) 就是根据组合数学来推的,2的个数有0 -到 4种选法,3的个数有 0 到 1种选法
54 = 2^1 * 3^3
因子数为:(1+1) * (3+1)

代码实现把一个数分解成若干素数的乘积形式:

int n;
for(int i = 2;i * i <= n;i++)
        {
            if(n % i == 0)
            {
                arr[++m] = i;//这里的++m与m++是有区别的,不然,你试试?如果是m++,下面的num[m]就该改成num[m-1]了;
                while(n % i == 0)
                {
                    num[m]++;
                    n /= i;
                }
            }
        }
        if(n > 1)//如果n等于1了,说明还剩下了一个质数
        {
            arr[++m] = n;
            num[m]++;
        }
        //arr数组存素数,num存这个素数的数量

是的,在博主的理解下,对解题有帮助的就是这一句核心。是不是觉得没用?那你就错了,虽然博主数学很差,编程也菜,但是在经历几个数论题的摧残后,就觉得这句话很有用了,光知道个定理是没有多大用的,来实战叭。

例题
牛客竞赛:阶乘
如果有兴趣也可以看看博主的这篇题解,其中还有这个定理的引论(我觉得算是引论叭。。嘻嘻)
题解

cf的题
目前我只记得了这俩个题。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值