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

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页