首页 > 其他分享 >GCD(2021陕西省赛C题)—整除分块

GCD(2021陕西省赛C题)—整除分块

时间:2022-08-19 12:24:06浏览次数:102  
标签:题意 GCD 分块 LL 最大公约数 2021 整除 define

目录

原题地址:GCD

题意

给你l, r和k,在l到r中任意取k个数,所有取法他们对应的最大公约数一共有多少个数。

1 ≤ l ≤ r ≤ 10^12,2 ≤ k ≤ r - l + 1

题解

看似是要求所有最大公约数,其实是让求所有可能的公约数。
证明:设任意一个数m = i * j是区间[l, r]内的两个数x,y的最大公约数,那么x与x + i的最大公约数即为i,x与x + j的最大公约数即为j。即所有可能的公约数都可以是题意里的最大公约数。

而判断一个数x是否是[l, r]内的某k个数的公约数,可以用式子r/x - (l-1)/x ≥ k来判断。

要遍历每个x是不可能的,这里采用整除分块的方法将时间复杂度降为O(\(\sqrt{n}\))。
整除分块:对于任意的i,满足n/i == n/j的最大的j为n/(n/i)。利用这个结论可以很轻易地算出\(\sum\limits_{i = 1}^{n}{n \over i}\)

for (LL l = 1, r; l <= n; l = r + 1) {
	r = n / (n / l);
	ans += (r - l + 1) * (n / l);
}

利用整除分块思想即可得出解题代码

代码

#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define _for(i, n) for(LL i = 1, lennn = n; i <= lennn; i++)
#define rep(i, a, b) for(LL i = a, lennn = b; i <= lennn; i++)
#define per(i, a, b) for(LL i = a, lennn = b; i >= lennn; i--)
#define sc(x) scanf("%lld", &x)
#define pf(x) printf("%lld\n", x)
#define pu push_back
#define po pop_back
#define maxn 1000006
#define maxnn 1000000007
#define mp make_pair
LL a[maxn], ma = -1, mi = maxnn;

void sol() {
    LL ans = 0;
    LL l, r, k;
    cin >> l >> r >> k;
    for(LL i = 1, j; i <= r; i = j + 1) {
        if (i < l) j = min(r / (r / i), (l - 1) / ((l - 1) / i));
        else j = r / (r / i);
        ans += (j - i + 1) * ((r / i - (l - 1) / i) >= k);
    }
    pf(ans);
}

int main() {
#ifndef ONLINE_JUDGE
    freopen("in.txt", "r", stdin);
    time_t t1 = clock();
#endif

    
    sol();

#ifndef ONLINE_JUDGE
    printf("time:%.2lfms\n", 1000.0 * (clock() - t1) / CLOCKS_PER_SEC);
#endif
    return 0;
}

标签:题意,GCD,分块,LL,最大公约数,2021,整除,define
From: https://www.cnblogs.com/F-Light/p/16478976.html

相关文章

  • P7960 [NOIP2021] 报数
    简要题意小Z在玩报数游戏,这个游戏有一个规则,就是对于一个正整数\(x\),如果满足\(7\midx\)或\(x\)的十进制写法中含有\(7\)或是十进制写法含有\(7\)的倍数,那么这......
  • 浅谈 Exgcd 和同余问题
    \[\large\text{本以为学的是数学专题,实际上学的是}\]\[\huge\stackrel{\text{xuán}}{\textbf{数}}\textbf{学专题}\]玄学专题\(\Huge\textbf{1}\\small\text{Exgcd(扩......
  • 58同城2021校招笔试真题-前端(复习)
    58同城2021校招笔试-前端1.以下代码输出:console.log([1,2,3,4,5].splice(1,2,3,4,5));console.log([1,2,3,4,5].slice(1,2,3,4,5));答案:[2,3]和[2]解析:splice:返回被删除......
  • P7909 [CSP-J 2021] 分糖果
    题目描述红太阳幼儿园有 nn 个小朋友,你是其中之一。保证 n\ge2n≥2。有一天你在幼儿园的后花园里发现无穷多颗糖果,你打算拿一些糖果回去分给幼儿园的小朋友们。由......
  • Codeforces Round 81 Same GCDs
    SameGCDs原文题意:给定a,m求x在\([0,m)\)中有多少数字满足\(gcd(a,m)=gcd(a+x,m)\)思路:我们令\(g=gcd(a,m)\)那么\(a=k_1g\),\(m=k_2g\),且\(gcd(k_1,k_2......
  • 分块九讲
    分块九讲一些闲话忽然好想学分块~~LOJ我来了!!!题目link(聊天记录来源于群hello,LibreOJ)......
  • Redis Desktop Manager for Mac(Redis可视化工具) v2021.10.236中文版
    mac软件下载:https://mac.macsc.com/mac/2697.html?id=MzI1OTY2 RedisDesktopManagermac版是一个快速、简单、支持跨平台的RedisDB管理工具,专为Mac用户设计,基于Qt5......
  • 【2022杭电多校】第九场 1008 Shortest Path in GCD Graph 【容斥+优化】
    链接https://acm.hdu.edu.cn/showproblem.php?pid=7240题意是有n个点组成的完全图,每个点的权重组成了1-n的排列,点i和点j的距离为\(gcd(i,j)\),给出q组询问,每次询问给出u......
  • CSP202112-4 磁盘文件操作
        第一眼,嗯,线段树裸题。开写,交,发现空间炸了,遂离散化。再交,发现在操作0的时候有可能遇到离散化中没出现过的点(即给定数据外的点),因为要二分右端点。怎么办呢?大胆观......
  • office办公软件大全:Microsoft Office LTSC 2021 for Mac
    office2021forMac商业预览Mac版office2021包括Word,Excel,PowerPoint,Outlook,OneDrive,最新版本的office将附带新的深色模式支持,辅助功能改进,对Word、Excel、PowerPoint、......