2017第四场多校联合 hdu6069
2017-08-04 20:11
113 查看
题目
题意:给你l,r,k,要求(∑i=lrd(ik))mod998244353。
题解:首先要知道的知识点是:对于一个知识点N,如果它可以被分解为pa11∗pa22.....pann,那么d(N)(即它的因子个数)=(a1+1)∗(a2+1)∗....∗(an+1)
知道了这个公式之后,那么我们只需要将给定数分解就好了,这里可以先将1-1e+10的素数全部筛选出来,选择小于r√的素数p,然后去和区间l-r的数进行处理,使l-r中所有p的因子提出来,然后分别记录p的指数就好了,(这里因子并不重要,重要的是因子的指数),最后会有无法处理的因子,这些因子的指数一定是1,单独处理就好了。
题意:给你l,r,k,要求(∑i=lrd(ik))mod998244353。
题解:首先要知道的知识点是:对于一个知识点N,如果它可以被分解为pa11∗pa22.....pann,那么d(N)(即它的因子个数)=(a1+1)∗(a2+1)∗....∗(an+1)
知道了这个公式之后,那么我们只需要将给定数分解就好了,这里可以先将1-1e+10的素数全部筛选出来,选择小于r√的素数p,然后去和区间l-r的数进行处理,使l-r中所有p的因子提出来,然后分别记录p的指数就好了,(这里因子并不重要,重要的是因子的指数),最后会有无法处理的因子,这些因子的指数一定是1,单独处理就好了。
#include<bits/stdc++.h> using namespace std; #define ll long long const int maxn=1000010,mod=998244353; int p[maxn/10],g[maxn],ans,tot; ll f[maxn],n,l,r,k; bool vis[maxn]; void slove(ll p) { for(ll i=l/p*p; i<=r; i+=p) { if(i>=l) { int o=0; while(f[i-l]%p==0) { f[i-l]/=p; o++; } g[i-l]=1ll*g[i-l]*(o*k+1)%mod; } } } int main() { tot=0; for(int i=2; i<maxn; i++) { if(!vis[i]) p[tot++]=i; for(int j=0; j<tot&&i*p[j]<maxn; j++) { vis[i*p[j]]=1; if(i%p[j]==0) break; } } int t; scanf("%d",&t); while(t--) { scanf("%lld %lld %lld",&l,&r,&k); n=r-l; for(int i=0; i<=n; i++) f[i]=i+l,g[i]=1; for(int i=0; i<tot; i++) { if(1ll*p[i]*p[i]>r) break; slove(p[i]); } ans=0; for(int i=0; i<=n; i++) { if(f[i]>1) { g[i]=1ll*g[i]*(k+1)%mod; } ans=(ans+g[i])%mod; } printf("%d\n",ans); } }
相关文章推荐
- 联合多表查询
- ISE联合MATLAB使用——配置system generator后发现综合工具只有Vivado
- MySQL多表联合查询
- 熵、联合熵、条件熵、交叉熵与相对熵意义
- SQL多表联合查询(Access数据库表)
- Halcon与C#联合编程(二)
- Twitter战略总监:如何挑选联合创始人
- Oracle数据库多表联合修改的三种语句
- 控件(二)——multiview和view控件联合使用显示视图
- 联合(union)的作用
- mysql where过滤条件中and连接的两个条件的顺序不必和建立的联合索引的字段顺序一致
- 函数的扩展---与结构赋值默认值联合使用
- Facebook联合创始人Chris Huges:一个成就奥巴马总统之路的“同志”男人
- 函数用法、联合查询
- hdu 4302 Holedox Eating 线段树去维护蛋糕!! 多校联合赛第三题
- MapReduce案例11——影评分析1(两表联合查询)
- hdu 4311 Meeting point-1 递推 多校联合赛(二) 第二题
- 九大厂商联合推出「快应用」,围攻微信?
- hdu 4334 Trouble 排序+优化 多校联合赛(四)第四题
- noip2014 洛谷1351 联合权值