首页 > 其他分享 >[ARC125B] Squares 题解

[ARC125B] Squares 题解

时间:2023-09-27 20:22:04浏览次数:34  
标签:std Squares end 题解 valueType le ARC125B aligned

题意

给定正整数 \(N\),求满足如下条件的正整数对 \((x, y)\) 的数量:

  • \(1 \le x, y \le N\)

  • \(x^2 - y\) 为完全平方数(\(0\) 也是完全平方数)

(\(1 \le N \le 10^{12}\))。

题解

因为 \(x^2 - y\) 为完全平方数,设其为 \(z^2\),那么有

\[\begin{aligned} x^2 - y = z^2 \\ \end{aligned}\]

设 \(b = x - z\),那么有

\[\begin{aligned} (z + b)^2 - y &= z^2 \\ y &= 2bz + b^2 \end{aligned}\]

考虑到 \(2bz + b^2 = y \le N \Rightarrow b^2 \le N\),因此 \(b\) 的取值个数是 \(\mathcal{O}(\sqrt{N})\) 级别的,所以可以枚举 \(b\) 的取值,接下来快速计算合法的 \(z\) 的个数,进而统计数对个数,那么有

\[\begin{aligned} y &= 2bz + b^2 \Leftrightarrow z \le \dfrac{N - b^2}{2b} \end{aligned}\]

有因为 \(x = z + b\),所以有

\[x \le N \Leftrightarrow z \le N - b \]

所以有

\[0 \le z \le \min\left\{\dfrac{N - b^2}{2b}, N - b\right\} \]

故在钦定 \(b\) 的情况下可以快速计算合法的 \(z\) 的取值,总复杂度 \(\mathcal{O}(\sqrt{N})\)。

Code

#include <bits/stdc++.h>

typedef long long valueType;

constexpr valueType MOD = 998244353;

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    std::cout.tie(nullptr);

    valueType N;

    std::cin >> N;

    valueType ans = 0;

    for (valueType i = 1; i * i <= N; ++i) {
        ans += (std::min((N - i * i) / (2 * i), N - i) + 1) % MOD;

        ans %= MOD;
    }

    std::cout << ans << std::endl;

    return 0;
}

标签:std,Squares,end,题解,valueType,le,ARC125B,aligned
From: https://www.cnblogs.com/User-Unauthorized/p/solution-ARC125B.html

相关文章

  • [题解] Codeforces Round 900(Div.3) E~F
    CodeforcesRound900(Div.3)E~FE.Iva&Pav因为按位与的结果不会随着越多数字的增加而增加,因此我们可以利用这个性质二分出右端点,只需要一个可以查询区间的数据结构即可。或者是按位考虑第\(i\)个数字的第\(k\)位,后缀最近的\(0\)的位置,按位考虑也可以。但是这题使用二分......
  • ACAM 学习笔记 | 附 YbtOJ 全部题解
    怎么有人现在才学ACAM呢。好像比SAM简单挺多啊,也不记得当时是哪里看不懂。AC自动机(✔)自动AC机(✘)概述ACAM(Aho–CorasickAutomaton),是用来解决多模式串匹配的字符串算法。它的结构是个DAG,其中点表示状态,边表示转移。这一点上各种自动机都是相同的。具体来说,可以感性......
  • [题解]CF1878E Iva & Pav
    CF是没题考了吧,每场都出二进制拆位。思路首先我们可以二分\(r\),因为\(r\)越大,按位与一定只会小于等于\(r\)小的情况。那么,我们可以用\(num_{i,j}\)记录\(a_j\)第\(i\)位的二进制情况。如果我们对\(num_{i,j}\)做一个前缀和,如果\(num_{i,r}-num_{i,l-1}=r......
  • 安装 SonarQube后sonarqube-sonarqube无法启动的问题解决
    1.前言我的环境:k8s集群(version1.23.6),安装了Kubesphere(versionv3.4)作为可视化界面,最近想要推动团队走CICD,于是在Kubesphere中启用了devops组件,参考:https://kubesphere.io/zh/docs/v3.4/pluggable-components/devops/。组件安装完成后,需要将Sonarqube集成到流水线中,于是又安装......
  • luogu P4819 [中山市选] 杀人游戏 题解 【强连通分量+缩点】
    目录题目链接思路分析代码题目链接P4819思路分析首先考虑这道题的连通性。容易发现这种类型的题目会容易产生环形的状态转移。假设我们知道了其中的一个点是否是黑白点,那么我们就可以知道所有点是否是黑白点。容易陷入一个误区:我们只能通过一个点知道他所相邻的最直接的点,如何......
  • CF1878 A-G 题解
    前言赛时代码可能比较难看。A判定\(a\)中是否有\(k\)即可。赛时代码B奇怪的构造题。令\(a_1=1,a_2=3\),其他项由上一项加一开始枚举判定可行性即可,可以简单证明时间复杂度为\(O(n)\)。赛时代码C容易发现当\(x\in\left[\dfrac{k(k+1)}{2},\dfrac{k(2n-k+1)}{2}\ri......
  • 【UVA 536】Tree Recovery 题解(根据遍历序列还原二叉树)
    小瓦伦丁非常喜欢玩二叉树。她最喜欢的游戏是随机构建查找节点中带有大写字母的二叉树。这是她创作的一个例子:为了给后代记录她的树,她为每棵树写下了两个字符串:预订单遍历(根、左子树、右子树)和有序遍历(左子树、根、右子树。对于上面绘制的树,预序遍历是DBACEGF,有序遍历是ABCDEFG......
  • Codeforces Round 742 Div2 A-D题解
    CodeforcesRound742Div2A-D题解A.DominoDisaster这题就是说给出一些2x1tile,然后给出2xn的第一行构造,问第二行这个刚开始想着是啥dp,一看那么多人过了果断改思路,发现这题就是个模拟题,就是把U换成D,D换成U,L和R不影响,然后输出就行了代码#include<bits/stdc++.h>using......
  • P6411 [COCI2008-2009#3] MATRICA 题解
    水题。发现根据限制\(M_{i,j}=M_{j,i}\)可以知道除了主对角线上的点,其他的点都是成对出现的。也就是说如果有一条要求的\(a_i\)为奇数,那么至少有一个\(c_i\)在主对角线上。记\(S=\sum\limits_{i=1}^{k}(a_i\equiv1\pmod2)\),即有\(S\)个要求中\(a_i\)为奇数。主对......
  • IDEA中的java代码Getters和Setters报红问题解决办法【杭州多测师_王sir】
    今天在新的编辑器中导入新项目时,发现很多get、set、toString的相关方法全部报红,仔细排查发现,原来是bean中注解采用lombok来自动生成get、set、toStirng、equals等方法,而新的编辑器未安装lombok plugin,所以全部报红。Lombok简介项目中经常使用bean,entity等类,绝大部分数据类类中都......