bzoj2721 [Violet 5]樱花

给出 \(n\) 求 \(\frac{1}{x}+\frac{1}{y}=\frac{1}{n!}\) 的正整数解数量 \(\bmod (10^9+7)\)

\(n\leq10^6\)

数论


先化式子

\[\begin{aligned}&\frac{1}{x}+\frac{1}{y}=\frac{1}{n!}\\&\frac{xy}{x+y}=n!\\&xy=n!(x+y)\\&xy-n!x-n!y+n!^2=n!^2\\&(x-n!)(y-n!)=n!^2\end{aligned}
\]

令 \(a=x-n!,\ b=y-n!\)

原题即为求 \(ab=n!^2\) 的整数解数量,即为 \(n!^2\) 的因数个数

令 \(n!=\displaystyle\prod_{p_i\in p}p_i^{c_i}\)

答案即为: $$\displaystyle\prod_{p_i\in p}{(2\times c_i+1)}$$

\(p.s.\ :\) 如果原题为本质不同的方案数,即 \(\verb|Luogu5253 丢番图|\) ,答案即为 \(\frac{ans+1}{2}\) 。因为对于每个 \(\{(a,\ b) | a\neq b\}\) 都被多算了一遍。

至于求出 \(c_i\) ,可以先筛出 \(1\cdots n\) 的每个质数 \(p\) ,然后考虑阶乘 \(n!\) 一共包含多少个 \(p\)

\(n!\) 中 \(p\) 的个数等于 \(1\cdots n\) 中每个数包含 \(p\) 的个数之和。

在 \(1\cdots n\) 中, 至少包含一个 \(p\) 的数显然有 \(\lfloor\frac{n}{p}\rfloor\) 个。而至少包含两个 \(p\) 的数有 \(\lfloor\frac{n}{p^2}\rfloor\) 个。不过其中的一个质因子已经在 \(\lfloor\frac{n}{p}\rfloor\) 中统计过了,所以只需要再统计第二个质因子,即累加上 \(\lfloor\frac{n}{p^2}\rfloor\) ,而不是 \(2\times\lfloor\frac{n}{p^2}\rfloor\) 。 \(\lfloor\frac{n}{p^3}\rfloor,\ \lfloor\frac{n}{p^4}\rfloor,\ \cdots\) 同理

综上所述, \(n!\) 中质因子 \(p\) 的个数为: $$\displaystyle\sum_{p^k\leq n}{\lfloor\frac{n}{p^k}\rfloor}$$

时间复杂度 \(O(n\log n)\)

代码

#include <bits/stdc++.h>
using namespace std; const int maxn = 1e6 + 10, P = 1e9 + 7;
int n, tot, p[maxn]; void sieve() {
int tmp = sqrt(n) + 1;
for (int i = 2; i <= tmp; i++) {
for (int j = i * i; j <= n; j += i) {
p[j] = 1;
}
}
for (int i = 2; i <= n; i++) {
if (!p[i]) p[++tot] = i;
}
} int main() {
scanf("%d", &n);
sieve();
int ans = 1;
for (int i = 1; i <= tot; i++) {
int x = 1, s = 0;
while (1ll * p[i] * x <= n) {
x *= p[i], s += n / x;
}
ans = 1ll * ans * (s << 1 | 1) % P;
}
printf("%d", ans);
return 0;
}

bzoj2721 [Violet5]樱花的更多相关文章

  1. BZOJ2721 Violet5樱花(数论)

    有(x+y)n!=xy.套路地提出x和y的gcd,设为d,令ad=x,bd=y.则有(a+b)n!=abd.此时d已是和a.b无关的量.由a与b互质,得a+b与ab互质,于是将a+b除过来得n!=ab ...

  2. 【BZOJ2721】樱花(数论)

    [BZOJ2721]樱花(数论) 题面 BZOJ 题解 先化简一下式子,得到:\(\displaystyle n!(x+y)=xy\),不难从这个式子中得到\(x,y\gt n!\). 然后通过\(x ...

  3. 【BZOJ-2721】樱花 线性筛 + 数学

    2721: [Violet 5]樱花 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 499  Solved: 293[Submit][Status][D ...

  4. Bzoj2721 [Violet]樱花(筛法)

    题面 题解 首先化一下式子 $$ \frac 1x+\frac 1y=\frac 1{n!} \Rightarrow \frac {x+y}{xy}=\frac 1{n!} \Rightarrow ( ...

  5. 【BZOJ2721】[Violet 5]樱花 线性筛素数

    [BZOJ2721][Violet 5]樱花 Description Input Output Sample Input 2 Sample Output 3 HINT 题解:,所以就是求(n!)2的约 ...

  6. bzoj2721 / P1445 [Violet]樱花

    P1445 [Violet]樱花 显然$x,y>n$ 那么我们可以设$a=n!,y=a+t(t>0)$ 再对原式通分一下$a(a+t)+ax=x(a+t)$ $a^{2}+at+ax=ax ...

  7. 【bzoj2721】[Violet 5]樱花

    题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=2721 好久没做数学题了,感觉有些思想僵化,走火入魔了. 这道题就是求方程$ \frac ...

  8. 「BZOJ2721」「LuoguP1445」 [Violet]樱花(数论

    题目背景 我很愤怒 题目描述 求方程 $\frac{1}{x}+\frac{1}{y}=\frac{1}{N!}$ 的正整数解的组数,其中$N≤10^6$. 解的组数,应模$1e9+7$. 输入输出格 ...

  9. 【筛法求素数】【质因数分解】bzoj2721 [Violet 5]樱花

    http://www.cnblogs.com/rausen/p/4138233.html #include<cstdio> #include<iostream> using n ...

随机推荐

  1. 洛谷P2286 [HNOI2004]宠物收养场

    题目描述 凡凡开了一间宠物收养场.收养场提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物. 每个领养者都希望领养到自己满意的宠物,凡凡根据领养者的要求通过他自己发明的一个特殊的公式,得出该领 ...

  2. Django之django模型层二多表操作

    一 创建模型 表和表之间的关系 一对一.多对一.多对多 ,用book表和publish表自己来想想关系,想想里面的操作,加外键约束和不加外键约束的区别,一对一的外键约束是在一对多的约束上加上唯一约束. ...

  3. Mysql sql 功能分类

    分类 DDL:数据定义语言,用于定义数据库对象,比如创建表,列,库等 DML:数据操作语言,用于添加.删除.修改数据 DQL:数据查询语言,用于查询(结果集是虚拟表,放在内存中) DCL:数据控制语言 ...

  4. JAVA 利用MyEclipse结合TestNG测试框架进行单元测试

    利用MyEclipse结合TestNG测试框架进行单元测试   by:授客 QQ:1033553122 测试环境 jdk1.8.0_121 myeclipse-10.0-offline-install ...

  5. 用C++对C++语法格式进行分析

    前言 最近C++项目需要用到脚本,这就关系到如何绑定对象到脚本运行环境.因使用到多套脚本语言,所以现有的绑定技术,都不能满足需求.所以只能寻求解析C++的头文件,再根据描述进行绑定.起初发现boost ...

  6. React router动态加载组件-适配器模式的应用

    前言 本文讲述怎么实现动态加载组件,并借此阐述适配器模式. 一.普通路由例子 import Center from 'page/center'; import Data from 'page/data ...

  7. 【Linux高频命令专题(24)】grep

    简述 Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则 ...

  8. bootstrap-paginator分页示例 源码 MVC

    准备 1.数据:bootstrap包(含分页插件bootstrap-paginator.js) 2.技术方案:ajax动态加载分页.部分视图.BLL取数 代码 模板页 @{ Layout = null ...

  9. java抓取网页或者文件的邮箱号码

    抓文件的 package reg; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.i ...

  10. [20190324]奇怪的GV$FILESPACE_USAGE视图.txt

    [20190324]奇怪的GV$FILESPACE_USAGE视图.txt--//发现GV$FILESPACE_USAGE定义很奇怪,做一个记录.1.环境:SCOTT@book> @ ver1P ...