pku 3421

题目不贴,大意就是说给定一个X,求一个最长的序列1 = X0, X1, X2, …, Xm = X
满足 Xi < Xi+1 and Xi | Xi+1
要求输出最大的长度和共有多少个不同的这个长度的序列;
想明白了这个题目就是因素分解;比如说一个X分解成x1^a*x2^b(当然,后面还可以很多,就弄两个出来意思下),那么考虑题目要求的序列形式,任何Xi 和  Xi+1  之间只能相差一个质因子,不然我们可以中间再插入一个,也就是Xi+1|Xi =t,这里t根据上面的假设至少可以分解成t=p*q的形式,所以这里的序列至少可以拆开成xi,xi*p,x(i+1),也就不是最长的了,所以也就是说序列的相邻项之间最多就只差一个质因子。
接着是最长的长度,在例子中应该是len=a+b,这个应该好理解,每项差一个嘛,总共a+b个;
这样序列的个数的话,因该是个排列组合问题,len个因子怎么排会不同的问题
说到这里好像是解决了这个问题,其实没有,题目卡时很厉害,卡在求素数上,题目中x的最大值是2^20次,打所有素数的表是不可能的了,要是在线求,应该会超时,解决办法大家说是只打1024一下的表,具体我没想下去,我就用在线算法,我觉得我那么写超时是不可能的,结果提交是RE!晕了。。。怎么都查不出错,算了
还有一个trick,就是n=1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值