bzoj 2956 模积和

网友投稿 269 2022-09-02

bzoj 2956 模积和

​​  求∑∑((n mod i)*(m mod j))其中1<=i<=n,1<=j<=m,i≠j。

这份代码调试了很久..菜

把式子随便推导一下展开即可 注意取模 6的逆元直接exgcd算完

公式:

∑ni=1∑mj=1(nmodi)×(mmodj)−∑min(n,m)i=1(nmodi)×(mmodj) ∑ i = 1 n ∑ j = 1 m ( n mod i ) × ( m mod j ) − ∑ i = 1 m i n ( n , m ) ( n mod i ) × ( m mod j ) ∑ni=1∑mj=1(n−i×⌊ni⌋)×(m−j×⌊mj⌋)−∑min(n,m)i=1(n−i×⌊ni⌋)×(m−j×⌊mj⌋) ∑ i = 1 n ∑ j = 1 m ( n − i × ⌊ n i ⌋ ) × ( m − j × ⌊ m j ⌋ ) − ∑ i = 1 m i n ( n , m ) ( n − i × ⌊ n i ⌋ ) × ( m − j × ⌊ m j ⌋ ) ∑ni=1(n−i×⌊ni⌋)∑mj=1(m−j×⌊mj⌋)−∑min(n,m)i=1(n−i×⌊ni⌋)×(m−j×⌊mj⌋)) ∑ i = 1 n ( n − i × ⌊ n i ⌋ ) ∑ j = 1 m ( m − j × ⌊ m j ⌋ ) − ∑ i = 1 m i n ( n , m ) ( n − i × ⌊ n i ⌋ ) × ( m − j × ⌊ m j ⌋ ) )

#include#include#define ll long longusing namespace std;const int mod=19940417;const int inv=3323403;inline int inc(int x,int v){return x+v>=mod?x+v-mod:x+v;}inline int dec(int x,int v){return x-v<0?x-v+mod:x-v;}inline int gao(int n,int m){ int tmp=0,last; for (int i=1;i<=n;i=last+1){ last=m/(m/i);if (last>n) last=n; tmp=inc(tmp,(ll)(m/i)*((ll)(last-i+1)*(last+i)/2%mod)%mod); }return tmp;}inline int calc(int x){return (ll)x*(x+1)%mod*(2*x+1)%mod*inv%mod;}int n,m,last; int main(){ freopen("bzoj2956.in","r",stdin); scanf("%d%d",&n,&m);int ans=0,ans1=0,ans2=0; ans1=inc(ans1,(ll)n*n%mod);ans2=inc(ans2,(ll)m*m%mod); ans1=dec(ans1,gao(n,n));ans2=dec(ans2,gao(m,m)); if (n>m) swap(n,m);ans=inc(ans,(ll)n*m%mod*n%mod); for (int i=1;i<=n;i=last+1){ last=min(n/(n/i),m/(m/i)); ans=inc(ans,(ll)(m/i)*(n/i)%mod*dec(calc(last),calc(i-1))%mod); }// printf("%d\n",m*gao(n,n));// printf("%d\n",n*gao(n,m)); ans=dec(ans,(ll)m*gao(n,n)%mod);ans=dec(ans,(ll)n*gao(n,m)%mod); ans1=dec((ll)ans1*ans2%mod,ans);printf("%d\n",ans1); return 0;}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:luogu3811【模板】乘法逆元
下一篇:营销案例精选:麦当劳换LOGO,60年的“M”没了?
相关文章

 发表评论

暂时没有评论,来抢沙发吧~