这个题暴露出杜教筛还是没掌握好。。
然后就是讨论一个常见的求和
然后原式就能化简成
然后窝就天真的吧这个和式拿去做杜教筛了。。。然而这个和式的一个问题是函数也是个和式,其卷积实在是难求,所以推到一半推不下去,参考别人的题解转化了下思路,枚举一下倍数,就变成。。。
然后令,F(n)为其前缀和,即求
再求f(n)的卷积
故
最终貌似要求好多个F(n)实际上都是这种形式,这些在杜教筛的时候其实已经都求过了。。
然后分块求+预处理复杂度
/**
* ┏┓ ┏┓
* ┏┛┗━━━━━━━┛┗━━━┓
* ┃ ┃
* ┃ ━ ┃
* ┃ > < ┃
* ┃ ┃
* ┃... ⌒ ... ┃
* ┃ ┃
* ┗━┓ ┏━┛
* ┃ ┃ Code is far away from bug with the animal protecting
* ┃ ┃ 神兽保佑,代码无bug
* ┃ ┃
* ┃ ┃
* ┃ ┃
* ┃ ┃
* ┃ ┗━━━┓
* ┃ ┣┓
* ┃ ┏┛
* ┗┓┓┏━━━━━━━━┳┓┏┛
* ┃┫┫ ┃┫┫
* ┗┻┛ ┗┻┛
*/
#include
#include
#include
#include
#include
#include
#include
1238 最小公倍数之和 V3
基准时间限制:8 秒 空间限制:262144 KB 分值: 640 难度:8级算法题
收藏
关注
出一个数N,输出小于等于N的所有数,两两之间的最小公倍数之和。
相当于计算这段程序(程序中的lcm(i,j)表示i与j的最小公倍数):
由于结果很大,输出Mod 1000000007的结果。
G=0;
for(i=1;i for(j=1;j<=N;j++) { G = (G + lcm(i,j)) % 1000000007; } Input Output Input示例 Output示例输入一个数N。(2 <= N <= 10^10)
输出G Mod 1000000007的结果。
4
72