桃子的算法笔记——反素数详解(acm/OI)

做了POJ2286之后,发现题目要求求出1-n因数最大的那个数。当时没想到合适的方法,后来想到了是反素数。

顺便总结了常见的和反素数有关的题型(个人觉得反素数只是作为题目的某一部分出现),还请各位dalao轻拍。

 

其实顾名思义,素数就是因子只有两个的数,那么反素数,就是因子最多的数(并且因子个数相同的时候值最小),所以反素数是相对于一个集合来说的。

我所理解的反素数定义就是,在一个集合中,因素最多并且值最小的数,就是反素数。

 

那么,如何来求解反素数呢?

首先,既然要求因子数,我首先想到的就是素因子分解。把n分解成n = p_{1}^{k_{1}}*p_{2}^{k_{2}}*p_{3}^{k_{3}}*...*p_{n-1}^{k_{n-1}}*p_{n}^{k_{n}}的形式,其中p是素数,k为他的指数。这样的话(k_{1}+1)*(k_{2}+1)*(k_{3}+1)*...*(k_{n}+1)就是总因子个数。

但是显然质因子分解的复杂度是很高的,并且前一个数的结果不能被后面利用。所以要换个方法。

 

我们来观察一下反素数的特点。

  1. 反素数肯定是从2开始的连续素数的幂次形式的乘积。
  2. 数值小的素数的幂次大于等于数值大的素数,即
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值