#zSybttg060206. 1624:樱花

1624:樱花

1624:樱花

题目描述

求不定方程:

1x+1y=1n!\frac{1}{x} + \frac{1}{y} = \frac{1}{n!}

的正整数解 (x,y)(x,y) 的数目。

输入格式

一个整数 nn

输出格式

一个整数,表示有多少对 (x,y)(x,y) 满足题意。答案对 109+710^9+7 取模。

样例

样例输入 #1

2

样例输出 #1

3

样例解释 #1

  • n=2n=2n!=2n! = 2
  • 方程:1x+1y=12\frac{1}{x} + \frac{1}{y} = \frac{1}{2}
  • 正整数解有:
    1. (x,y)=(3,6)(x,y) = (3,6)
    2. (x,y)=(4,4)(x,y) = (4,4)
    3. (x,y)=(6,3)(x,y) = (6,3)
  • 33 对。

数据范围

  • 对于 30%30\% 的数据,n100n \le 100
  • 对于全部数据,1n1061 \le n \le 10^6

时空限制

  • 时间限制:1000 ms
  • 内存限制:524288 KB

注意:本题需要将方程变形。由 1x+1y=1n!\frac{1}{x} + \frac{1}{y} = \frac{1}{n!},通分得 x+yxy=1n!\frac{x+y}{xy} = \frac{1}{n!},即 n!(x+y)=xyn!(x+y) = xy。移项:xyn!xn!y=0xy - n!x - n!y = 0,配方:(xn!)(yn!)=(n!)2(x - n!)(y - n!) = (n!)^2

a=xn!a = x - n!, b=yn!b = y - n!,则 ab=(n!)2ab = (n!)^2。由于 x,yx, y 是正整数,a,ba, b 是整数且 a>n!a > -n!, b>n!b > -n!。但 x=a+n!>0x = a + n! > 0y=b+n!>0y = b + n! > 0,所以 a,ba, b 可以取任意整数使得 ab=(n!)2ab = (n!)^2a>n!a > -n!, b>n!b > -n!。实际上,由于 n!>0n! > 0aabb 同号,且 a,ba, b 可以是正数或负数,但 x,yx, y 为正整数,所以 a>n!a > -n!,即 aa 最小可取 n!+1-n!+1,此时 x=1x=1。但更方便的是,我们只关心正整数解,所以 x,yx, y 为正整数,即 a>n!a > -n!b>n!b > -n!。由于 ab=(n!)2>0ab = (n!)^2 > 0aabb 同号,且 a,ba, b 可以是正数或负数。

aabb(n!)2(n!)^2 的因子。设 (n!)2(n!)^2 的因子个数为 dd,则有序对 (a,b)(a,b)dd 组(包括正负因子)。但需要满足 x,yx, y 为正整数,即 a>n!a > -n!b>n!b > -n!。由于 ab=(n!)2ab = (n!)^2,如果 aa 是负数且绝对值大于 n!n!,则 b=(n!)2/ab = (n!)^2 / a 是负数且绝对值小于 n!n!,那么 b>n!b > -n! 可能成立(因为 bb 是负数且绝对值小于 n!n!,所以 b>n!b > -n!)。但 a<n!a < -n! 时,x=a+n!<0x = a + n! < 0,不是正整数。所以必须 an!+1a \ge -n! + 1。同理 bn!+1b \ge -n! + 1

然而,我们可以直接考虑正整数解。由于 x,yx, y 对称,我们只需求出正整数解的数量(包括 x=yx=yxyx \ne y 但对称)。由 (xn!)(yn!)=(n!)2(x - n!)(y - n!) = (n!)^2,令 X=xn!X = x - n!, Y=yn!Y = y - n!,则 XY=(n!)2XY = (n!)^2x,yx, y 为正整数当且仅当 X>n!X > -n!, Y>n!Y > -n!。由于 XXYY 同号,且乘积为正,它们要么都是正数,要么都是负数且绝对值至少为 11。但 X>n!X > -n!Y>n!Y > -n!,如果 XX 是负数,则 Xn!+1X \ge -n!+1,即 X(n!1)X \ge -(n!-1)。同理 YY。但 XY=(n!)2XY = (n!)^2,如果 XX 是负数,则 YY 也是负数,且 XY=(n!)2|X| \cdot |Y| = (n!)^2。由于 Xn!1|X| \le n!-1,则 Y(n!)2n!1>n!|Y| \ge \frac{(n!)^2}{n!-1} > n!,所以 Y<n!Y < -n!,不满足 Y>n!Y > -n!。因此 XXYY 不能同时为负数。所以 XXYY 必须都是正数。

因此,问题转化为求 (n!)2(n!)^2 的正因子个数 dd,则有序正整数解 (x,y)(x,y) 的数目就是 dd(因为每个正因子 XX 对应一个 Y=(n!)2/XY = (n!)^2 / X,且 x=X+n!>0x = X + n! > 0, y=Y+n!>0y = Y + n! > 0)。注意 xxyy 对称,但有序对 (x,y)(x,y) 包括 (a,b)(a,b)(b,a)(b,a)

所以答案就是 (n!)2(n!)^2 的约数个数。设 n!=piein! = \prod p_i^{e_i},则 (n!)2=pi2ei(n!)^2 = \prod p_i^{2e_i},约数个数 d=(2ei+1)d = \prod (2e_i + 1)

因此,我们需要对 n!n! 进行质因数分解,求出每个质数 pp 的指数 epe_p,然后计算 (2ep+1)mod(109+7)\prod (2e_p + 1) \bmod (10^9+7)

由于 n106n \le 10^6,可以用线性筛预处理所有质数,然后对每个质数 pp 计算 ep=k=1n/pke_p = \sum_{k=1}^{\infty} \lfloor n / p^k \rfloor(勒让德公式)。注意中间结果可能很大,需要取模。