https://61.142.113.109/senior/#main/show/3456
事实上,这道题的难度还是很大的,因为数据跨越那么大,说明30~60分是一个跨越,60~100是另一个跨越,我考试时只想到了暴力,30分,不知道为什么1/i+1/j=1/n!按照这个公式暴力错了。。。可能是某个地方打错了吧,于是我决定去推这个公式
1/i+1/j=1/n!
->(1/i+1/j)*ij=ij/n!
->i+j=ij/n!
->(i+j)*n!=ij
我就是用这个式子去做30分的。。。
然后要想60分,接着推。
(i+j)*n!=ij
->i*n!+j*n!=ij
->j*n!=i(j-n!)
->j*n!/j-n!=i
我们知道i>0且为正整数,所以
j*n!/j-n!>0,且j-n! | j*n!
且j-n!>0即j>n!
因为j>n!,所以,我们设j=n!+k
原式即为=(n!*(n!+k))/n!+k-n!
->(n!^2+n!k)/k
因为n!k是可以整除k的,所以呢n!^2也是可以整除k的,这样才满足整个式子都能整除k。
所以,很显然了,k是n!^2的因子。
因子定理为(q1+1)*(q1+1)…(qn+1)=因子的个数。
q为质因子的可用的个数,加1是因为可以选0个
所以线性筛法求出每个数的最小的能被整除的素数,然后再算出这些素数的个数,再高精度乘法加压位,最后再来个常数优化,常数优化就是先用一个变量去乘,乘到一定数量了就去高精度,这样可以省下大量时间。