首页 > 其他分享 >[COCI2012-2013#1] SNAGA 题解

[COCI2012-2013#1] SNAGA 题解

时间:2024-08-27 21:27:18浏览次数:14  
标签:lfloor 题解 mid COCI2012 constexpr cfrac Big Bigg 2013

前言

题目链接:洛谷

题意简述

定义 \(f(x)\) 表示不能整除 \(x\) 的最小正整数。

给出数字 \(n\),每次 \(n \gets f(n)\),当 \(n = 2\) 时停止。定义 \(g(n)\) 为这一过程中的数字个数,例如 \(g(6) = 4\)。给定 \(l, r\),求 \(\sum \limits _ {i = l} ^ r g(i)\)。

\(3 \leq l \lt r \leq 10^{18}\)。

题目分析

首先发现 \(f(x)\) 非常小,在 \(x \leq 10^{18}\) 时,有 \(n = \max f(x) = 41\)。所以,我们枚举 \(i = 1, \ldots, n\),每次统计在 \([l, r]\) 中,\(f(x) = i\) 的个数有多少个,这些数的 \(g\) 函数值都是 \(g(i) + 1\),所以将个数乘上 \(g(i) + 1\) 就可以累加到答案中去了。得到 \(1 \sim n\) 的 \(g\) 的函数值是简单的。容易证明,这样的统计是不重不漏的。

我们怎么求出 \(f(x) = i\) 的个数呢?发现,“不能整除 \(x\) 的最小正整数”等价于“能够整除小于它的所有正整数,但不能整除它”,换句话说,\(f(x) = i\) 的 \(x\) 满足 \(\forall t \in [1, i), t \mid x\) 以及 \(i \not \mid x\)。不妨从前者中扣出后者,即两个条件同时满足的很难计算,那么我们先计算满足 \(A\) 的方案数,减去满足 \(A\) 但不满足 \(B\) 的方案数。

前者又等价于 \(\operatorname{lcm}(1, \ldots, i - 1) \mid x\),不妨记 \(p_i = \operatorname{lcm}(1, \ldots, i)\),前者等价于 \(p_{i - 1} \mid x\)。所以 \([l, r]\) 中,能够整除 \(p_{i - 1}\) 的个数,等价于是 \(p_{i - 1}\) 的倍数的个数,也就是 \(\Big \lfloor \cfrac{r}{p_{i - 1}} \Big \rfloor - \Big \lfloor \cfrac{l - 1}{p_{i - 1}} \Big \rfloor\)。

再来看看满足前者但不满足后者的个数。此时 \(p_{i - 1} \mid x\) 并且 \(i \mid x\)。发现其实就是 \(p_i \mid x\),用同样的方法计数即可。

形式化地讲,答案 \(ans = \sum \limits _ {i = 2} ^ {41} {\Large {\Bigg (}} \Bigg ( \Big \lfloor \cfrac{r}{p_{i - 1}} \Big \rfloor - \Big \lfloor \cfrac{l - 1}{p_{i - 1}} \Big \rfloor \Bigg ) - \Bigg ( \Big \lfloor \cfrac{r}{p_{i}} \Big \rfloor - \Big \lfloor \cfrac{l - 1}{p_{i}} \Big \rfloor \Bigg ) {\Large {\Bigg )}} \times \Big ( g(i) + 1 \Big)\)。

\(f, g\) 什么的打个表预处理一下,时间复杂度 \(\Theta(\max f(x))\)。

代码

#include <cstdio>
#include <iostream>
#include <array>
using namespace std;

constexpr int f(int x) {
    for (int i = 2;; ++i)
        if (x % i)
            return i;
}

constexpr const int N = 41;

template <typename T>
using arr = array<T, N + 1>;
using lint = long long;

constexpr arr<int> len = []() {
    arr<int> res = {};
    res[2] = 1;
    for (int i = 3; i <= N; ++i) res[i] = res[f(i)] + 1;
    return res;
}();

template <typename T>
constexpr T gcd(T a, T b) {
    return b ? gcd(b, a % b) : a;
}
template <typename T>
constexpr T lcm(T a, T b) {
    return a / gcd(a, b) * b;
}

constexpr arr<lint> val = []() {
    arr<lint> res = {};
    res[1] = 1;
    for (int i = 2; i <= N; ++i) res[i] = lcm(res[i - 1], 1ll * i);
    return res;
}();

lint l, r, res;

signed main() {
    scanf("%lld%lld", &l, &r);
    for (int i = 2; i <= N; ++i)
        res += ((r / val[i - 1] - (l - 1) / val[i - 1]) - (r / val[i] - (l - 1) / val[i])) * (len[i] + 1);
    printf("%lld", res);
    return 0;
}

反思 & 总结

遇到数据范围巨大的时候,考虑:倍增、矩阵快速幂、数位 DP、根号分治、数学性质。

本题属于最后一类,关键点在于发现 \(\operatorname{lcm}\) 很小,并转变计数视角,使用小小容斥计数。

标签:lfloor,题解,mid,COCI2012,constexpr,cfrac,Big,Bigg,2013
From: https://www.cnblogs.com/XuYueming/p/18383507

相关文章

  • 【题解】「CQOI2014」通配符匹配
    【题解】「CQOI2014」通配符匹配https://www.luogu.com.cn/problem/P3167令\(s\)为模式串,\(t\)为文本串。首先有一个显然的的dp是,\(f_{i,j}\)表示模式串的前\(i\)个和文本串的前\(j\)个是否匹配。显然\(O(n^2)\)是过不了的。Motivation:注意到题目限定了通配符......
  • CF645D - Robot Rapping Results Report 题解
    \[Problem\]有\(N\)个机器人,给出\(M\)组关系,表示两个机器人的能力关系,问至少需要前几组关系可以确定所有机器人的排名。\[Solution\]由于是求最少的前几组关系,而关系越少越难确定排名,关系越多越容易确定,不难发现本题满足单调性,考虑二分。那么给出关系要求总排名的题,就应该......
  • AT_code_festival_2017_qualc_d - Yet Another Palindrome Partitioning 题解
    YetAnotherPalindromePartitioning题解题目大意给出一个字符串,求把这个字符串划分成最少的小段,使每个小段都可以经过字母重组后为回文串。题目分析如果暴力的话,需要DFS段数、每一段的左节点、右节点,以及判断是否为回文串,时间复杂度在\(O(|S|^{|S|})\)左右。但是本......
  • Dirsearch-master安装使用及常见问题解决(互联网和内网)
    1、文档概述        本手册适用于帮助初学者快速掌握Dirsearch-master的安装、配置与使用方法。通过阅读本文档,您将能够了解如何搭建Dirsearch-master环境、扫描目标服务器上潜在的敏感文件和目录,并解读生成的报告。此外,本文档还涵盖了常见问题及解决方法,以便您在实际......
  • 【题解】P3210 [HNOI2010] 取石头游戏
    \(\large\mathfrak{1st.\Preamble|}\)前言题目传送门:P3210[HNOI2010]取石头游戏)主要是参考楼下大佬的题解,对于其中没讲到或比较难懂的地方进行讲解,以及配上了图。\(\large\mathfrak{2nd.\Solution|}\)题解楼下大佬的比喻十分形象生动地描绘了俩人去石头的过程:取石子......
  • 题解:P10922 Happybob's Numbers (UBC001B)
    主要思路:贪心,构造。思路构造题,首先明确要删的就是小于\(n\)的数,因为若删了大于等于\(n\)的数就无法进行之后的操作了。那这道题就简单了,先从大到小排序,遇到小于当前长度\(k\)的数,就将这个数删掉,这时长度需减\(1\),毕竟顺序可以自己调,将下一个小于当前\(k\)的数,放到下一......
  • 题解:P5934 [清华集训2012] 最小生成树
    主要思路:网络流。思路先考虑最小生成树,如果一条边边权大于等于选中的边,那么这条边是否删去没有任何影响。按边权排序,对于边\((u,v,L)\),若要加上当且仅当\(u\)和\(v\)并不联通。把所有边权比选定的边的边权小的边拿出来连上,流量均为\(1\),最小割。最大树同理,连上边权比选......
  • 题解:P11007 『STA - R7』Odtlcsu
    评价:简单构造。思路注意题目中的“如果有多解输出任意一种即可”。由于\(a\)与\(a^{2}\)的奇偶性必定是一致的,所以我们可以将情况分为两种。当\(x\)与\(y\)奇偶性不一致时,但由于\(a\)与\(a^{2}\)的奇偶性必定是一致的,所以始终无法构造出正确的序列。但注意题目......
  • P4126 [AHOI2009] 最小割 题解
    DescriptionA,B两个国家正在交战,其中A国的物资运输网中有\(N\)个中转站,\(M\)条单向道路。设其中第\(i\(1\leqi\leqM)\)条道路连接了\(u_i,v_i\)两个中转站,那么中转站\(u_i\)可以通过该道路到达\(v_i\)中转站,如果切断这条道路,需要代价\(c_i\)。现在B国想找出一个......
  • 最大矩阵区间 题解
    题意简述给定\(n\)行\(m\)列矩阵\(A\)。对于每一行\(i\),选择非空区间\([l_i,r_i]\),满足\(\foralli\in[1,n)\),\([l_i,r_i]\)和\([l_{i+1},r_{i+1}]\)相交,即\(\max\{l_i,l_{i+1}\}\leq\min\{r_i,r_{i+1}\}\)。求所有选出区间的\(A_{i,j}\)值......