Solution -「LOCAL 28731」「重庆市 2021 中学友谊赛」Rainyrabbit 爱求和
Description
Link.
\(\operatorname{Rainyrabbit}\) 是一个数学极好的萌妹子,近期他发现了一个可爱的函数:
\]
其中 \(\operatorname{lcm}(d,m)\) 表示 \(d\) 和 \(m\) 的最小公倍数。
她觉得只算这一个函数太单调了于是想要对这个函数求和,给出 \(a,b,c\),求:
\]
同时 \(\operatorname{I.w.rabbit}\) 固定 \(c\) 的值不变,给出 \(T\) 组 \(a,b\),请回答此时式子对 \(998244353\) 取模后的值。
算是概括过了额。
Solution
先看 \(f\) 怎么把那个烦死的整除去掉。
f(n,m,k)&=\sum_{d=1}^{n}d^{k}\lfloor\frac{n}{\text{lcm}(d,m)}\rfloor \\
&=\sum_{d=1}^{n}d^{k}\lfloor\frac{\frac{n}{d}}{\frac{m}{\gcd(d,m)}}\rfloor \\
&=\sum_{d=1}^{n}d^{k}\lfloor\frac{\frac{n}{d}}{\frac{m}{\gcd(d,m)}}\rfloor \\
\end{aligned}
\]
来看 \(\lfloor\frac{\frac{n}{d}}{\frac{m}{\gcd(d,m)}}\rfloor\),因为 \(\lfloor\frac{a}{b}\rfloor=\sum_{i=1}^{a}[b|i]\),所以 \(\lfloor\frac{\frac{n}{d}}{\frac{m}{\gcd(d,m)}}\rfloor=\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}[\frac{m}{\gcd(d,m)}|i]=\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}[m|id]\)。所以
f(n,m,k)&=\sum_{d=1}^{n}d^{k}\lfloor\frac{\frac{n}{d}}{\frac{m}{\gcd(d,m)}}\rfloor \\
&=\sum_{d=1}^{n}d^{k}\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}[m|id] \\
&=\sum_{m|i}^{n}\sum_{d|i}d^{k} \\
&=\sum_{m|i}^{n}\sigma_{k}(i) \\
\end{aligned}
\]
然后代回原式。
\sum_{i=1}^{a}\sum_{j=1}^{b}\sum_{k=0}^{c}\sum_{j|d}^{i}\sigma_{k}(d)&=\sum_{k=0}^{c}\sum_{d=1}^{a}\sigma_{k}(d)(a-d+1)\sum_{j=1}^{b}[j|d] \\
\end{aligned}
\]
考虑如何计算 \(\sum_{k=0}^{c}\sigma_{k}(d)\)。把函数又拆回去:
\sum_{k=0}^{c}\sigma_{k}(d)&=\sum_{w|d}\sum_{k=0}^{c}w^{k}=\sum_{w|d}\frac{w^{c+1}-1}{w-1}
\end{aligned}
\]
最后一步是等比数列求和,然后你就可以调和级数预处理了。具体来说就是线筛的时候筛一下 \(w^{c+1}\),这东西是个完全积性函数,你乱筛就行了。
设这玩意儿为 \(s(d)=\sum_{w|d}\frac{w^{c+1}-1}{w-1}\),原式改写为:
\]
然后后面那个 sigma 你也可以反过来直接调和级数。还有就是 \(b>a\) 的时候没有贡献,所以可以取个 \(\min\),这样能多几分。
来看看怎么屮多测。
和 数表 那道题一样,我们把询问离线下来,以 \(b\) 为关键字排序后树状数组。
把中间那个系数拆出来,变成:
\]
前面那个好说,直接来;后面就在树状数组修改时乘上系数即可。
综上,维护两个树状数组即可。
#include<cstdio>
#include<algorithm>
using namespace std;
void read(long long &x)
{
x=0;
char c=getchar();
while(c<'0'||c>'9') c=getchar();
while(c>='0'&&c<='9')
{
x=(x<<3)+(x<<1)+(c^'0');
c=getchar();
}
}
void write(long long x)
{
if(x>9) write(x/10);
putchar((x%10)^'0');
}
const long long mod=998244353;
struct node
{
long long a,b,ID;
}nodes[200010];
struct fenwick
{
#define lowbit(x) ((x)&-(x))
long long fen[1000010],mx;
void ins(long long x,long long y)
{
while(x<=mx)
{
fen[x]=(fen[x]+y)%mod;
x+=lowbit(x);
}
}
long long find(long long x)
{
long long res=0;
while(x)
{
res=(res+fen[x])%mod;
x^=lowbit(x);
}
return res;
}
}onefe,anofe;
long long t,a,b,c,tag[1000010],prime[1000010],cnt,fu[1000010],exfu[1000010],power[1000010],cur=1,mx,ans[200010];
bool cmp(node one,node ano)
{
return one.b<ano.b;
}
long long cqpow(long long bas,long long fur)
{
long long res=1;
while(fur)
{
if(fur&1) res=res*bas%mod;
bas=bas*bas%mod;
fur>>=1;
}
return res;
}
void search(long long x)
{
tag[1]=power[1]=1;
for(long long i=2;i<=x;++i)
{
if(!tag[i])
{
prime[++cnt]=i;
power[i]=cqpow(i,c+1);
}
for(long long j=1;j<=cnt&&prime[j]*i<=x;++j)
{
tag[prime[j]*i]=1;
power[prime[j]*i]=power[prime[j]]*power[i]%mod;
if(i%prime[j]==0) break;
}
}
fu[1]=(c%mod+1)%mod;
for(long long i=2;i<=x;++i) fu[i]=((power[i]-1+mod)%mod)*cqpow(i-1,mod-2)%mod;
for(long long i=1;i<=x;++i)
{
for(long long j=i;j<=x;j+=i) exfu[j]=(exfu[j]+fu[i])%mod;
}
}
int main()
{
read(t);
read(c);
search(1000000);
for(long long i=1;i<=t;++i)
{
read(nodes[i].a);
read(nodes[i].b);
nodes[i].ID=i;
nodes[i].b=min(nodes[i].a,nodes[i].b);
mx=max(mx,nodes[i].a);
}
sort(nodes+1,nodes+t+1,cmp);
onefe.mx=anofe.mx=mx;
for(long long i=1;i<=mx&&cur<=t;++i)
{
for(long long j=i;j<=mx;j+=i)
{
onefe.ins(j,exfu[j]);
anofe.ins(j,exfu[j]*j%mod);
}
while(i==nodes[cur].b)
{
ans[nodes[cur].ID]=((onefe.find(nodes[cur].a)*(nodes[cur].a+1))%mod-anofe.find(nodes[cur].a)+mod)%mod;
cur++;
}
}
for(long long i=1;i<=t;++i)
{
write(ans[i]);
putchar('\n');
}
return 0;
}
Solution -「LOCAL 28731」「重庆市 2021 中学友谊赛」Rainyrabbit 爱求和的更多相关文章
- LOJ 6060「2017 山东一轮集训 Day1 / SDWC2018 Day1」Set(线性基,贪心)
LOJ 6060「2017 山东一轮集训 Day1 / SDWC2018 Day1」Set $ solution: $ 这一题的重点在于优先级问题,我们应该先保证总和最大,然后再保证某一个最小.于是我 ...
- 「题解」「美团 CodeM 资格赛」跳格子
目录 「题解」「美团 CodeM 资格赛」跳格子 题目描述 考场思路 思路分析及正解代码 「题解」「美团 CodeM 资格赛」跳格子 今天真的考自闭了... \(T1\) 花了 \(2h\) 都没有搞 ...
- FileUpload控件「批次上传 / 多档案同时上传」的范例--以「流水号」产生「变量名称」
原文出處 http://www.dotblogs.com.tw/mis2000lab/archive/2013/08/19/multiple_fileupload_asp_net_20130819. ...
- 「Windows MFC 」「Edit Control」 控件
「Windows MFC 」「Edit Control」 控件
- SQL Server 2016 的「動態資料遮罩 (Dynamic Data Masking)」
一些特別注重資訊安全.個人資料的公司或產業 (如: 金融.保險業),通常「測試用資料庫」的資料,會加上「遮蔽:去識別化」的功能,避免個資外洩.以往必須自己撰寫 SQL 語句或 Stored Proce ...
- 「ZJOI2019」&「十二省联考 2019」题解索引
「ZJOI2019」&「十二省联考 2019」题解索引 「ZJOI2019」 「ZJOI2019」线段树 「ZJOI2019」Minimax 搜索 「十二省联考 2019」 「十二省联考 20 ...
- 「bzoj1003」「ZJOI2006」物流运输 最短路+区间dp
「bzoj1003」「ZJOI2006」物流运输---------------------------------------------------------------------------- ...
- 「bzoj1925」「Sdoi2010」地精部落 (计数型dp)
「bzoj1925」「Sdoi2010」地精部落---------------------------------------------------------------------------- ...
- 「LOJ#10051」「一本通 2.3 例 3」Nikitosh 和异或(Trie
题目描述 原题来自:CODECHEF September Challenge 2015 REBXOR 1≤r1<l2≤r2≤N,x⨁yx\bigoplus yx⨁y 表示 ...
- 「LOJ#10056」「一本通 2.3 练习 5」The XOR-longest Path (Trie
#10056. 「一本通 2.3 练习 5」The XOR-longest Path 题目描述 原题来自:POJ 3764 给定一棵 nnn 个点的带权树,求树上最长的异或和路径. 输入格式 第一行一 ...
随机推荐
- “AI Earth”人工智能创新挑战赛:助力精准气象和海洋预测Baseline[1]、NetCDF4使用教学、Xarray 使用教学,针对气象领域.nc文件读取处理
1."AI Earth"人工智能创新挑战赛:助力精准气象和海洋预测Baseline[1].NetCDF4使用教学.Xarray 使用教学,针对气象领域.nc文件读取处理 比赛官网: ...
- 2021/1/10例会 academy of management journal 2014vol 57 No.2,484-514
这次的论文由于考试周的原因看的不是很细,但大概还是浏览过一遍了.然后这次我的拓展又神奇的匹配到了教授想让我们接下来想看的论文. perfect! 但不足的是,没有进行相关论文的检索,自己的拓展没有理论 ...
- ENVI实现QUAC、简化黑暗像元、FLAASH方法的遥感影像大气校正
本文介绍基于ENVI软件,实现对Landsat 7遥感影像加以预处理与多种不同大气校正方法的操作. 目录 1 数据导入与辐射定标 2 波段合成 3 编辑头文件 4 转换文件格式 5 QUAC快速大气校 ...
- 基于JavaFX的扫雷游戏实现(五)——设置和自定义控件
它来了它来了,最后一期终于来了.理论上该讲的全都讲完了,只剩下那个拖了好几期的自定义控件和一个比较没有存在感的设置功能没有讲.所以这次就重点介绍它们俩吧. 首先我们快速浏览下设置的实现,上图: ...
- 处理.git文件夹过大出现臃肿问题-filter-branch和BFG工具
Git开发手册 git一些不常用的命令记不住,可以查看git开发手册(https://m.php.cn/manual/view/34957.html) 1..git/objects/pack 文件过大 ...
- Git子模块使用说明
介绍 前端不同应用存在公共的脚本或样式代码,为了避免重复开发,将公共的代码抽取出来,形成一个公共的 git 子模块,方便调用和维护. 软件架构 本仓库代码将作为 git 子模块,被引用到其他仓库中,不 ...
- 2023ccpc大学生程序设计竞赛-zx
这次ccpc整体来说做题做的比较卡,第一个签到都wa了,后面几道中档题全都是至少wa一次才能过,这导致我们不仅罚时增加也导致需要大量时间修改代码,还有一个G题很可惜,当时只注意到B过题多所以有点被带歪 ...
- Unity UGUI的CanvasScaler(画布缩放器)组件的介绍及使用
Unity UGUI的CanvasScaler(画布缩放器)组件的介绍及使用 1. 什么是CanvasScaler组件? CanvasScaler是Unity中UGUI系统中的一个组件,用于控制画布的 ...
- Node: 将时间戳转换成日期并分组
// 对时间戳按日期进行分组 let moment = require('moment') let timestamp_array = [ 1645059333000, 1613523333000, ...
- FJOI2022 游记
2022.3.28 省选延期,延到了4.16 2022.4.11 省选又延期,延到了5.2 FJOI 要回来了!! Day -7 开始停课了 QwQ Day -6 打摆 Day -5 打摆 不行,我不 ...