【JZOJ5395】Count
来源:互联网 发布:ipad壁纸软件推荐 编辑:程序博客网 时间:2024/06/04 22:42
【JZOJ5395】Count
Description
令
求
Input
三个数
Output
一个数答案,对998244353取模
Sample Input
2 3 1
Sample Output
5
Hint
1与2互质,
1,2与3互质,
Solution
易知f(1)=2,f(2)=2
当n>2时,f(n)=n,证:
与n互质的数有
φ(n) 个,又因为若a<n,gcd(a,n)=1 则gcd(n−a,n)=1 ,且n>2时2|φ(n) ,所以互质数和为φ(n)∗n2 ,f(i)=φ(n)n2φ(n)∗2=n
设
接下来问题就变成了求自然数幂和。
差分法
(把i=k之外的移项,
但这种方法放到原问题上会超时
拉格朗日(Lagrange)插值法
引入
拉格朗日插值法的目的就是让你求一个多项式(或者是化简的通式):
已知k+1个x以及对应多项式的值,求该k次k项式的通式
定义自变量值为x的多项式取值为
对于我们已知的
有
我们要找出l_i(x)的式子使得:
1. 当
2. 其余情况多项式成立
那么,我们可以找到一种:
当
x=xi 时,对于各个xj 有x−xj=xi−xj即x−xjxi−xj=1∴li(x)=1
否则因为x一定是x1..k+1 中的一个,那么∃x=xj(i≠j) ,此时li(x)=0
既然如此,此式子对于xi 都可得出yi ,又因k+1个点可确定一个k次多项式,所以,其他的(x′,y′) 依然满足
于是我们得出一种通式
回到原问题
我们知道自然数k次幂和的求和公式是个k+1次多项式
由差分表法的,
S(k)=(n+1)k+1−1−∑k−1i=0Cik+1S(i)k+1 ,此时n是个自变量,(x+1)k+1 二项式展开后有k+1次项,而S(i)(i<k) 也依赖于前面的S(i),数学归纳,可证S(i)不会超过k次项,故自然数幂和求和公式是一个k+1次多项式
那么我们要先制定一些
利用
只能是
这可以用阶乘处理
预处理
#include<cstring>#include<cstdio>#include<cctype>#define mo 998244353using namespace std;typedef long long ll;ll l,r,k,frac[1001001],nyfrac[1001001],ny[1001001],s[1001001],f[1001001],g[1001001];ll qpow(ll a,ll ind){ ll ans=1; for(;ind;ind>>=1,a=a*a%mo)if(ind&1)ans=ans*a%mo;return ans;}ll ask(ll n){ if(!n)return 0; ll ans=0; if(n<=k+2)ans=s[n];else{ f[0]=g[k+3]=1; for(ll i=1;i<=k+2;i++)f[i]=f[i-1]*(n-i)%mo; for(ll i=k+2;i;i--)g[i]=g[i+1]*(n-i)%mo; for(ll i=1;i<=k+2;i++){ ans=(ans+nyfrac[i-1]*nyfrac[k+2-i]*((k+2-i&1)?-1:1)%mo*s[i]%mo*f[i-1]%mo*g[i+1])%mo; } } ans=(ans-1+qpow(2,k)+mo)%mo;return ans;}int main(){ freopen("count.in","r",stdin); freopen("count.out","w",stdout); frac[0]=nyfrac[0]=1; for(ll i=1;i<=1000010;i++)ny[i]=qpow(i,mo-2); for(ll i=1;i<=1000010;i++)frac[i]=frac[i-1]*i%mo,nyfrac[i]=nyfrac[i-1]*ny[i]%mo; scanf("%lld %lld %lld",&l,&r,&k); for(ll i=1;i<=k+2;i++)s[i]=(s[i-1]+qpow(i,k))%mo; printf("%lld",(ask(r)-ask(l-1)+mo)%mo); fclose(stdin);fclose(stdout); return 0;}
- 【JZOJ5395】Count
- [JZOJ5395]Count
- [JZOJ5395]【NOIP2017提高A组模拟10.6】Count
- Count
- COUNT
- count
- Count
- count
- count
- count
- count
- Count
- count
- Count
- count(),count(1),count(*)
- count(1) 与 count(*)
- count(*)与count(id)
- javap:count = count ++
- Idea 添加 运行参数
- haha
- VS~VS编辑器中光标模式切换
- 设计模式C++实现(3)——适配器模式
- 数据库 内连接、外连接、交叉连接总结
- 【JZOJ5395】Count
- 欢迎使用CSDN-markdown编辑器
- GRADUAL GENERALIZATION OF NAUTICAL CHART CONTOURS WITH A B-SPLINE SNAKE METHOD
- (完全支持 https SSL安全证书专业版)2017年10月5日的T5虚拟交易8套模版首页微信登陆说明
- 1012. The Best Rank (25)
- (crm笔记2-5)用户登录问题之验证账户
- mybatis中使用延迟加载的配置
- 简单模拟——拥挤的华农校巴
- SSL2748 2017年9月26日提高组T2 房屋覆盖(贪心)