传送门

看到题目就要开始愉快地推式子

原式 $\frac{1}{x}+\frac{1}{y}=\frac{1}{n!}$

$\rightarrow \frac{x+y}{xy}=\frac{1}{n!} \rightarrow (x+y)n!=xy \rightarrow xy-(x+y)n!=0$

两边同时加上 $(n!)^2$ 得

$xy-(x+y)n!+(n!)^2=(n!)^2\rightarrow (x-n!)(y-n!)=(n!)^2$

设$a=(x-n!),b=(y-n!)$,则原式化为 $ab=(n!)^2$

如果 a 确定了,那么 b 也确定了,那么 x,y 也都确定了

所以就变成了求 a 的取值方案数

设$z=(n!)^2$

运用唯一分解定理把$z$分解成几个质数的乘积

$z=p_1^{k_1}p_2^{k_2}...p_n^{k_n}$

a可以在每个质数中取 0 到 k1 个作为质因子,那么每个质数有 $k_i+1$ 种取法

根据乘法原理,共有 $(k_1+1)(k_2+1)...(k_n+1)$ 种取法

所以答案就是这个

把阶乘分解就只要把 1 到 n 每个数都分解一遍,复杂度O(nlogn)

分解一个数的质因子都会吧..就不讲了

#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<iostream>
using namespace std;
typedef long long ll;
inline int read()
{
int x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
const int N=1e6+,mo=1e9+;
int n,cnt[N],ans=;//cnt存 (n!)^2 的质因子数量
int pri[N],tot,p[N];//p存每个数最小的质因子
bool not_pri[N];
void pre()
{
not_pri[]=; p[]=;
for(int i=;i<=n;i++)
{
if(!not_pri[i]) { pri[++tot]=i; p[i]=i; }
for(int j=;j<=tot;j++)
{
ll g=pri[j]*i; if(g>n) break;
not_pri[g]=; p[g]=pri[j];
if(!(i%pri[j])) break;
}
}
}
int main()
{
n=read();
pre();
for(int i=;i<=n;i++)
{
int t=i;
while(t!=) cnt[p[t]]++,t/=p[t];//分解质因子
}
for(int i=;i<=tot;i++) ans=1ll*ans*(cnt[pri[i]]*+)%mo;//记得cnt要乘2加1
printf("%d",ans);
return ;
}

P1445 [Violet]樱花的更多相关文章

  1. 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 ...

  2. 洛谷P1445 [Violet] 樱花 (数学)

    洛谷P1445 [Violet] 樱花 题目背景 我很愤怒 题目描述 求方程 1/X+1/Y=1/(N!) 的正整数解的组数,其中N≤10^6. 解的组数,应模1e9+7. 输入输出格式 输入格式: ...

  3. Luogu P1445[Violet]樱花/P4167 [Violet]樱花

    Luogu P1445[Violet]樱花/P4167 [Violet]樱花 真·双倍经验 化简原式: $$\frac{1}{x}+\frac{1}{y}=\frac{1}{n!}$$ $$\frac ...

  4. 【题解】洛谷P1445 [Violet]樱花 (推导+约数和)

    洛谷P1445:https://www.luogu.org/problemnew/show/P1445 推导过程 1/x+1/y=1/n! 设y=n!+k(k∈N∗) 1/x​+1/(n!+k)​=1 ...

  5. 洛谷 P1445 [Violet]樱花

    #include<cstdio> #include<algorithm> #include<cstring> #include<vector> usin ...

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

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

  7. luoguP1445 [Violet]樱花

    链接P1445 [Violet]樱花 求方程 \(\frac {1}{X}+\frac {1}{Y}=\frac {1}{N!}\) 的正整数解的组数,其中\(N≤10^6\),模\(10^9+7\) ...

  8. Luogu1445 [Violet]樱花 ---- 数论优化

    Luogu1445 [Violet]樱花 一句话题意:(本来就是一句话的) 求方程 $\frac{1}{X} + \frac{1}{Y} = \frac{1}{N!}$ 的正整数解的组数,其中$N \ ...

  9. 【洛谷 P1445】 [Violet]樱花(唯一分解定理)

    做了题还是忍不住要写一发题解,感觉楼下的不易懂啊. 本题解使用latex纯手写精心打造. 题意:求\(\frac{1}{x}+\frac{1}{y}=\frac{1}{n!}\)的正整数解总数. 首先 ...

随机推荐

  1. 基于ActiveMQ的Topic的数据同步——初步实现

    一.背景介绍 公司自成立以来,一直以做项目为主,算是经累经验吧,自去年以来,我们部门准备将以前的项目做成产品,大概细分了几个小的产品,部们下面又分了几个团队,分别负责产品的研发,而我们属于平台团队,负 ...

  2. maven手动安装oracle驱动到仓库

    1. 2.打开http://maven.jahia.org/maven2/一步步打开找到 我需要的版本 https://devtools.jahia.com/nexus/content/groups/ ...

  3. 如何判断一个字符串是否是UTF8编码

    UTF8是以8bits即1Bytes为编码的最基本单位,当然也可以有基于16bits和32bits的形式,分别称为UTF16和UTF32,但目前用得不多,而UTF8则被广泛应用在文件储存和网络传输中. ...

  4. return()函数

    在函数中,执行完return()函数后,下面的语句就不会再执行了.例子: <?php function fn() { echo "you are awsome"; retur ...

  5. 使用java开源包解析ifc并获取数据(树形结构)

     import java.io.File;import java.util.Collection;import java.util.Enumeration;import java.util.HashM ...

  6. 通过iOS中的按钮来触发html文件中按钮所触发的函数

    html文件的代码 <!DOCTYPE html> <html> <head> <title>标题</title> </head> ...

  7. php学习笔记-默认参数

    在定义函数的时候,我们可以把其中的一个参数变的特殊起来,使它有一个默认值,这个参数就叫默认参数.在调用这个函数的时候,你既可以给这个默认参数传递一个值,这样的话默认参数的值会被覆盖掉,也可以不给它传递 ...

  8. linux环境安装python

    linux环境下安装python3,一步一步来吧! 安装python3 安装readline-devel依赖 ,用于解决python3安装完成后,退格和方向键乱码问题 yum install read ...

  9. deb包制作(转)

    deb 包已被广泛应用但是也在不断的更新,这里介绍Ubuntu deb包安装设置使用,帮助大家安装更新Ubuntu deb包系统.制作Ubuntu deb包的三种方法 | Sean's Blog [转 ...

  10. emr问题处理

    --通过his病历号查询emr中对应的患者ID --通过患者ID找出患者所有的病历集合ID --通过病历集合查找患者所有的病历 --通过病历dataID查找对应的病历数据,病历存在大字段中 '; -- ...