zoukankan      html  css  js  c++  java
  • 【洛谷2260】[清华集训2012] 模积和(除法分块)

    点此看题面

    • (sum_{i=1}^nsum_{j=1}^m(nmod i)(mmod j)[i ot=j])
    • (n,mle10^9)

    第一步:解除限制

    考虑(i ot=j)这个限制使得(i)(j)的贡献不能独立计算,因此我们先容斥处理掉它。

    也就是说,用所有情况减去(i=j)的情况即为答案,得到下面这个式子:(不妨设(nle m)

    [sum_{i=1}^n(nmod i) imes sum_{j=1}^m(mmod j)-sum_{i=1}^{n}(nmod i)(mmod i) ]

    (sum_{i=1}^n(nmod i))

    (sum_{i=1}^n(nmod i))是一个非常经典的问题。

    由于(nmod i=n-lfloorfrac ni floor imes i),所以原式相当于:

    [sum_{i=1}^n(n-lfloorfrac ni floor imes i)=n^2-sum_{i=1}^nlfloorfrac ni floor imes i ]

    显然后面这一项可以用除法分块轻松搞定。

    (sum_{j=1}^m(mmod j))同理。

    (sum_{i=1}^n(nmod i)(mmod i))

    考虑仍旧按照之前的转化,得到:

    [sum_{i=1}^n(n-lfloorfrac ni floor imes i)(m-lfloorfrac mi floor imes i)=n^2m-sum_{i=1}^n(m imes lfloorfrac ni floor imes i+n imes lfloorfrac mi floor imes i-lfloorfrac ni floor imes lfloorfrac mi floor imes i^2) ]

    后面这家伙也是一个除法分块就能解决的。

    综上所述,这道题就用除法分块做完了。

    代码:(O(sqrt n))

    #include<bits/stdc++.h>
    #define Tp template<typename Ty>
    #define Ts template<typename Ty,typename... Ar>
    #define Reg register
    #define RI Reg int
    #define Con const
    #define CI Con int&
    #define I inline
    #define W while
    #define X 19940417
    #define I2 9970209
    #define I6 3323403
    #define S1(x) (1LL*I2*(x)%X*((x)+1)%X)//1+2+...+x
    #define S2(x) (1LL*I6*(x)%X*((x)+1)%X*(2*(x)+1)%X)//1+4+9+...+x^2
    using namespace std;
    int n,m;
    I int Q1(CI n)//求Σ(n%i)
    {
    	RI t=0;for(RI l=1,r;l<=n;l=r+1) r=n/(n/l),//除法分块
    		t=(1LL*(n/l)*(S1(r)-S1(l-1)+X)+t)%X;return (1LL*n*n-t+X)%X;
    }
    I int Q2(CI n,CI m)//求Σ(n%i)(m%i)
    {
    	RI t=0;for(RI l=1,r;l<=n;l=r+1) r=min(n/(n/l),m/(m/l)),//除法分块
    		t=((1LL*m*(n/l)+1LL*n*(m/l))%X*(S1(r)-S1(l-1)+X)+t)%X,
    		t=(t-1LL*(n/l)*(m/l)%X*(S2(r)-S2(l-1)+X)%X+X)%X;
    	return (1LL*n*n%X*m%X-t+X)%X;
    }
    int main()
    {
    	return scanf("%d%d",&n,&m),n>m&&(n^=m^=n^=m),printf("%d
    ",(1LL*Q1(n)*Q1(m)-Q2(n,m)+X)%X),0;//强制n≤m
    }
    
  • 相关阅读:
    解释机器学习模型的一些方法(一)——数据可视化
    机器学习模型解释工具-Lime
    Hive SQL 语法学习与实践
    LeetCode 198. 打家劫舍(House Robber)LeetCode 213. 打家劫舍 II(House Robber II)
    LeetCode 148. 排序链表(Sort List)
    LeetCode 18. 四数之和(4Sum)
    LeetCode 12. 整数转罗马数字(Integer to Roman)
    LeetCode 31. 下一个排列(Next Permutation)
    LeetCode 168. Excel表列名称(Excel Sheet Column Title)
    论FPGA建模,与面向对象编程的相似性
  • 原文地址:https://www.cnblogs.com/chenxiaoran666/p/Luogu2260.html
Copyright © 2011-2022 走看看