Warning: session_start(): open(/tmp/sess_6c42f953b4ad28bfdc43cd884b00d92e, O_RDWR) failed: No space left on device (28) in /data/wiki/inc/init.php on line 239

Warning: session_start(): Failed to read session data: files (path: ) in /data/wiki/inc/init.php on line 239

Warning: Cannot modify header information - headers already sent by (output started at /data/wiki/inc/init.php:239) in /data/wiki/inc/auth.php on line 430
Writing /data/wiki/data/cache/0/0b6e5d302d9cc90b4a185c5eed259b6b.captchaip failed

Warning: Cannot modify header information - headers already sent by (output started at /data/wiki/inc/init.php:239) in /data/wiki/inc/actions.php on line 38

Warning: Cannot modify header information - headers already sent by (output started at /data/wiki/inc/init.php:239) in /data/wiki/lib/tpl/dokuwiki/main.php on line 12
2020-2021:teams:intrepidsword:2020-nowcoder-multi-10 [CVBB ACM Team]

用户工具

站点工具


2020-2021:teams:intrepidsword:2020-nowcoder-multi-10

G. Math Test

对不起,我数学太差了。

题目大意:给定 $1\le a\le10^{5}$ 和 $1\le n\le10^{18}$,求有多少 $1\le x\le y\le n$ 满足 $\gcd(x,y)=1$,$x\mid y^{2}+a$,$y\mid x^{2}+a$。有 $10^{6}$ 组询问。

题解:对于一组满足要求的 $x,y$,可以证明 $y,\frac{y^{2}+a}{x}$ 也满足要求。

$$ \begin{aligned} &\left(\frac{y^{2}+a}{x}\right)^{2}+a\\ =&\frac{y^{4}+2ay^{2}+a^{2}+ax^{2}}{x^{2}}\\ =&\frac{y^{4}+2ay^{2}+a(x^{2}+a)}{x^{2}} \end{aligned} $$

显然能被 $y$ 整除。假设质数 $p$ 满足 $p\mid y,p\mid\frac{y^{2}+a}{x}$,那么 $p\mid a$。又 $y\mid x^{2}+a$,因此 $p\mid x$,矛盾。因而 $\gcd(y,\frac{y^{2}+a}{x})=1$。

反过来,$\frac{x^{2}+a}{y},x$ 也满足要求。容易发现这两个变换互为逆变换。显然 $y\le\frac{y^{2}+a}{x}$ 仍然成立,而逆变换则不一定成立。我们显然每个合法的对一直逆变换,直到 $\frac{x^{2}+a}{y}>x$ 为止。所有合法对都可以通过这样的对变换得到。

要使 $x\le y$,而 $\frac{x^{2}+a}{y}>x$,那么就有 $x(y-x)<a$。那么这样的 $x,y$ 对只有 $a\log a$ 个。然后 $a$ 则解个同余方程即可,合法的 $x,y,a$ 对约两百多万个。于是我们可以把全部表打出来,这个数字应该是 $19491555$ 个,对每个询问二分查询。

2020-2021/teams/intrepidsword/2020-nowcoder-multi-10.txt · 最后更改: 2021/06/19 23:24 由 toxel