题意

题目链接

Sol

啊啊这题好恶心啊,推的时候一堆细节qwq

\(a \% i = a - \frac{a}{i} * i\)

把所有的都展开,直接分块。关键是那个\(i \not= j\)的地方需要减。。。。

然后就慢慢写就好了

  1. #include<bits/stdc++.h>
  2. #define Pair pair<int, int>
  3. #define MP(x, y) make_pair(x, y)
  4. #define fi first
  5. #define se second
  6. #define int long long
  7. #define LL long long
  8. #define Fin(x) {freopen(#x".in","r",stdin);}
  9. #define Fout(x) {freopen(#x".out","w",stdout);}
  10. using namespace std;
  11. const int MAXN = 1e6 + 10, mod = 19940417, INF = 1e9 + 10;
  12. const double eps = 1e-9;
  13. template <typename A, typename B> inline LL add(A x, B y) {
  14. if(x + y < 0) return x + y + mod;
  15. return x + y >= mod ? x + y - mod : x + y;
  16. }
  17. template <typename A, typename B> inline void add2(A &x, B y) {
  18. if(x + y < 0) x = x + y + mod;
  19. else x = (x + y >= mod ? x + y - mod : x + y);
  20. }
  21. template <typename A, typename B> inline LL mul(A x, B y) {
  22. x = (x + mod) % mod;
  23. y = (y + mod) % mod;
  24. return 1ll * x * y % mod;
  25. }
  26. template <typename A> inline LL sqr(A x) {
  27. return 1ll * x * x;
  28. }
  29. int N, M, a, b;
  30. int sum(int l, int r) {
  31. if(l == r) return l;
  32. int n = r - l + 1;
  33. if(n & 1) return add(mul(l, n), mul(n, (n - 1) / 2));
  34. else return add(mul(l, n), mul(n / 2, n - 1));
  35. }
  36. int calc(int n) {
  37. int ret = 0;
  38. for(int i = 1, j; i <= n; i = j + 1) {
  39. j = n / (n / i);
  40. add2(ret, mul(n / j, sum(i, j)));
  41. }
  42. return ret;
  43. }
  44. int get(int x) {
  45. int a = x, b = 2 * x + 1, c = x + 1;
  46. if(a % 2 == 0) a /= 2;
  47. else if(b % 2 == 0) b /= 2;
  48. else if(c % 2 == 0) c /= 2;
  49. if(a % 3 == 0) a /= 3;
  50. else if(b % 3 == 0) b /= 3;
  51. else if(c % 3 == 0) c /= 3;
  52. return mul(mul(a, b), c);
  53. }
  54. int fuck2(int i, int j) {//sum k^2
  55. return add(get(j), -get(i - 1));
  56. }
  57. int calc2() {
  58. int ret = 0;
  59. for(int i = 1, j; i <= N; i = j + 1) {
  60. j = min(M / (M / i), N / (N / i));
  61. int a = M / i, b = N / i;
  62. add2(ret, add(add(mul(N, mul(a, sum(i, j))), mul(M, mul(b, sum(i, j)))), -mul(mul(a, b), fuck2(i, j))));
  63. }
  64. return ret;
  65. }
  66. signed main() {
  67. cin >> N >> M;
  68. if(N > M) swap(N, M);
  69. a = calc(N);
  70. b = calc(M);
  71. int ans = mul(add(mul(N, N), -a), add(mul(M, M), -b));
  72. add2(ans, -mul(N, mul(N, M)));
  73. add2(ans, calc2());
  74. cout << ans;
  75. return 0;
  76. }

BZOJ2956: 模积和(数论分块)的更多相关文章

  1. BZOJ2956: 模积和——整除分块

    题意 求 $\sum_{i=1}^n \sum_{j=1}^m (n \ mod \ i)*(m \ mod \ j)$($i \neq j$),$n,m \leq 10^9$答案对 $1994041 ...

  2. 【数论分块】bzoj2956: 模积和

    数论分块并不精通……第一次调了一个多小时才搞到60pts:因为不会处理i==j的情况,只能枚举了…… Description $\sum_{i=1}^{n}\sum_{j=1 \land i \not ...

  3. 【bzoj2956】模积和 数论

    题目描述 求∑∑((n mod i)*(m mod j))其中1<=i<=n,1<=j<=m,i≠j. 输入 第一行两个数n,m. 输出 一个整数表示答案mod 1994041 ...

  4. BZOJ2956: 模积和

    Description 求∑∑((n mod i)*(m mod j))其中1<=i<=n,1<=j<=m,i≠j. Input 第一行两个数n,m. Output 一个整数表 ...

  5. bzoj2956: 模积和(数论)

    先算出无限制的情况,再减去i==j的情况. 无限制的情况很好算,有限制的情况需要将式子拆开. 注意最后的地方要用平方和公式,模数+1是6的倍数,于是逆元就是(模数+1)/6 #include<i ...

  6. ACM学习历程—BZOJ2956 模积和(数论)

    Description 求∑∑((n mod i)*(m mod j))其中1<=i<=n,1<=j<=m,i≠j. Input 第一行两个数n,m. Output 一个整数表 ...

  7. [Bzoj 2956] 模积和 (整除分块)

    整除分块 一般形式:\(\sum_{i = 1}^n \lfloor \frac{n}{i} \rfloor * f(i)\). 需要一种高效求得函数 \(f(i)\) 的前缀和的方法,比如等差等比数 ...

  8. bzoj 2956: 模积和 ——数论

    Description 求∑∑((n mod i)*(m mod j))其中1<=i<=n,1<=j<=m,i≠j. Input 第一行两个数n,m. Output 一个整数表 ...

  9. BZOJ 2956 模积和(分块)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2956 [题目大意] 求∑∑((n%i)*(m%j))其中1<=i<=n,1 ...

随机推荐

  1. CSV Data Set Config设置

    Jmeter参数化常用的两种方法: 1.使用函数助手 2.CSV Data Set Config 本章主要讲解CSV Data Set Config设置 1.Filename:文件名,指保存信息的文件 ...

  2. Android v7包下Toolbar和ActionBarActivity实现后退导航效果

    android.support.v7包下的ToolBar和ActionBarActivity,均自带后退导航按钮,只是要手动开启,让它显示出来.先来看看ToolBar,页面前台代码: <andr ...

  3. tcpdump命令抓包参数

    在 Linux 命令行中使用 tcpdump 抓包 通过实例学习tcpdump命令 聊聊 tcpdump 与 Wireshark 抓包分析 tcpdump常用参数 -n 显示IP地址和端口号 -v 显 ...

  4. [原创]K8一句话密码爆破工具{秒破10万} 支持ASP/PHP/ASPX/JSP/CFM/DIY

    工具: K8_FuckOneShell 20161224编译: VS2012  C# (.NET Framework v4.0)组织: K8搞基大队[K8team]作者: K8拉登哥哥博客: http ...

  5. 线程中消费者生产者的实例代码(synchronized关键字)

    http://www.cnblogs.com/DreamDrive/p/6204665.html  这个是用Lock类实现的. 场景: 厨师类: import java.util.List; impo ...

  6. webgl之观察三维空间

    在之前的教程中,我们已经接触到了3d的基本应用,而这里,将会继续介绍两种不同的相机,即透视相机和正投影相机:还会学习设置相机的不同参数,这样就可以使场景以不同的角度显示出来. 一.正投影和透视投影概念 ...

  7. c++中char类型字符串拼接以及int类型转换为char类型 && 创建文件夹

    如下所示: #include <iostream> #include <windows.h> #include <cstring> using namespace ...

  8. C# 多线程九之Timer类

    1.简介 相信写过定时任务的小伙伴都知道这个类,非常的轻量级,而且FCL中大量的类使用了这个方法,比如CancellationTokenSource的CancelAfter就是用Timer去做的. 当 ...

  9. IdentityServer-Setup and Overview

    设置和概述 有两种方式创建一个IdentityServer 项目: 从零开始 使用Visual Studio的ASP.NET Identity模板 如果是从零开始,我们提供一序列的帮助及内存存储,所以 ...

  10. 最大子数组问题/Maximum Subarray

    问题描述: Find the contiguous subarray within an array (containing at least one number) which has the la ...