传送门:https://www.luogu.org/problemnew/show/P2522

题目描述

对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数。

分析

特殊情况和POI2007 ZAP-Queries相同。
接下来的问题就是解决普遍情况,不难得到答案就是\(ans(b,d)-ans(b,c-1)-ans(a-1,d)+ans(a-1,c-1)\),这是容斥原理。
这道题目有毒,int和long long乱开会T掉,要注意。

ac代码

#include <bits/stdc++.h>
#define ll long long
#define ms(a, b) memset(a, b, sizeof(a))
#define inf 0x3f3f3f3f
using namespace std;
template <typename T>
inline void read(T &x) {
    x = 0; T fl = 1;
    char ch = 0;
    while (ch < '0' || ch > '9') {
        if (ch == '-') fl = -1;
        ch = getchar();
    }
    while (ch >= '0' && ch <= '9') {
        x = (x << 1) + (x << 3) + (ch ^ 48);
        ch = getchar();
    }
    x *= fl;
}
#define N 50005
int prime[N], mu[N], sum[N];
bool vis[N];
int a, b, c, d, k, cnt;
void get_mu(int MAXN) {
    mu[1] = 1;
    for (int i = 2; i <= MAXN; i ++) {
        if (!vis[i]) {
            prime[++ cnt] = i;
            mu[i] = -1;
        }
        for (int j = 1; j <= cnt && prime[j] * i <= MAXN; j ++) {
            vis[i * prime[j]] = 1;
            if (i % prime[j] == 0) break;
            else mu[i * prime[j]] = -mu[i];
        }
    }
    for (int i = 1; i <= MAXN; i ++) sum[i] = sum[i - 1] + mu[i];
}
ll solve(int a, int b) {
    ll res = 0;
    for (int l = 1, r; l <= min(a, b); l = r + 1) {
        r = min(a / (a / l) , b / (b / l));
        res += 1ll * (a / (l * k)) * (b / (l * k)) * (sum[r] - sum[l - 1]);
    }
    return res;
}
int main() {
    int cas;
    read(cas);
    get_mu(50000);
    while (cas --) {
        read(a); read(b); read(c); read(d); read(k);
        printf("%lld\n", solve(b, d) - solve(b, c - 1) - solve(a - 1, d) + solve(a - 1, c - 1));
    }
    return 0;
}

最新文章

  1. jquery实现章节目录效果
  2. SQL Server数字辅助表的实现
  3. 优化MySchool数据库(二)
  4. BootStrap tabs标签 使用fade效果首次加载页面不能显示内容
  5. flex中通过sprite在地图上画柱状图主要代码
  6. EditorWindow窗口大小锁死后没有边框的解决方法
  7. PHP学习笔记--入门篇
  8. Windows批处理(cmd/bat)常用命令小结
  9. Equals 和==
  10. SSL/TLS 握手过程详解
  11. Chapter 4 Invitations——20
  12. 雷林鹏分享:jQuery EasyUI 数据网格 - 自定义排序
  13. HTML5-SVG-基础篇
  14. asp.net core WebApi 返回 HttpResponseMessage
  15. centos6.5上安装redis3.2.1遇见的坑
  16. 11.9luffycity(4)
  17. Huffman Coding
  18. java多线程-----volatile
  19. 关于CodePlex
  20. HBase 架构与工作原理5 - Region 的部分特性

热门文章

  1. [Oracle]PDB Clone 方法
  2. 《坦克世界》1.0+:使用 CPU 优化的图形和物理丰富用户体验
  3. centos6下redis cluster集群部署过程
  4. Linux下FTP环境部署梳理(vsftpd和proftpd)
  5. apache工作模式总结及网站访问缓慢处理记录
  6. C#JSON与XML转换
  7. 使用eclipse利用Junit4进行程序模块的测试
  8. Post Tuned Hashing,PTH
  9. HDOJ2013_蟠桃记
  10. 产品激活 比如Windows激活 , office激活 等激活的原理是什么? KMS等激活工具安全吗?