题意概括:

题目意思很明白,输入一个 i n t int int类型整数 n n n ( 1 < = n < = 1 0 6 1<=n<=10^6 1<=n<=106 ) 求方程 1 x + 1 y = 1 n ! \frac{1}{x}+\frac{1}{y}=\frac{1}{n!} x1​+y1​=n!1​ ( n ! n! n! 表示 n n n 的阶乘,即 n ! = 1 × 2 × 3 × ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ × n n!=1\times2\times3\times······\times n n!=1×2×3×⋅⋅⋅⋅⋅⋅×n ) 解的个数

题目分析:

肯定是一个数论题~~(废话)~~,题目中的方程直接枚举是 O ( n 3 ) O(n^3) O(n3) 的时间复杂度,绝对会 T L E TLE TLE ,那么就对方程进行分析:
1 x + 1 y = 1 n ! 设 n ! = k , \begin{aligned} & \frac{1}{x} + \frac{1}{y} = \frac{1}{n!}\\ & 设 n!=k,\\ \end{aligned} ​x1​+y1​=n!1​设n!=k,​
第一眼看上去, x x x 和 y y y 都是一次的整数,只有 n ! n! n! 是一个式子,所以用一个未知数代替,方便运算和思考。其实就是我懒对原方程进行化简,我习惯把 x x x 当作主元,用 y y y 也可以。把 y y y 和 k k k 当作一个常数,用解普通方程的步骤去解。
∴ 1 x + 1 y = 1 k 1 x = 1 k − 1 y 1 x = y k y − k k y 1 x = y − k k y x = k y y − k \begin{aligned} & \therefore \frac{1}{x} + \frac{1}{y} = \frac{1}{k}\\ & \frac{1}{x} = \frac{1}{k} - \frac{1}{y}\\ & \frac{1}{x} = \frac{y}{ky} - \frac{k}{ky}\\ & \frac{1}{x} = \frac{y-k}{ky}\\ & x = \frac{ky}{y-k}\\ \end{aligned} ​∴x1​+y1​=k1​x1​=k1​−y1​x1​=kyy​−kyk​x1​=kyy−k​x=y−kky​​
这时,无法对方程继续化简,但分式上下都有 y y y 和 k k k ,所以可以考虑再设一个关于 y y y 和 k k k 的未知数,去表达 y y y 和 k k k 的关系。
设 y − k = p , ∴ y = k + p \begin{aligned} & 设 y-k = p,\\ & \therefore y = k + p\\ \end{aligned} ​设y−k=p,∴y=k+p​
找到之后,就可以把 y = k + p y=k+p y=k+p 代入方程,得到
∴ x = k ( k + p ) p ∴ x = k + k 2 p \begin{aligned} & \therefore x = \frac{k(k+p)}{p}\\ & \therefore x = k+\frac{k^2}{p}\\ \end{aligned} ​∴x=pk(k+p)​∴x=k+pk2​​
解出 x x x 的值后,观察式子,发现可以运用文化课上讲过的整数的性质,
∵ x , k = n ! 为正整数 ∴ p ∣ k 2 ∴ y − n ! ∣ ( n ! ) 2 ∴ ( y − n ! ) 为 ( n ! ) 2 的因子 ∴ ( y − n ! ) 为 n ! 的因子 ∵ y , n ! 为正整数 ∴ x 为正整数 ∴ 只要 ( y − n ! ) 为 n ! 的因子,就有原方程的一组解 \begin{aligned} & \because x,k=n!为正整数\\ & \therefore p \mid k^2\\ & \therefore y-n! \mid (n!)^2\\ & \therefore (y-n!) 为(n!)^2的因子\\ & \therefore (y-n!) 为n!的因子\\ & \because y,n!为正整数\\ & \therefore x为正整数\\ & \therefore 只要(y-n!)为n!的因子,就有原方程的一组解\\ \end{aligned} ​∵x,k=n!为正整数∴p∣k2∴y−n!∣(n!)2∴(y−n!)为(n!)2的因子∴(y−n!)为n!的因子∵y,n!为正整数∴x为正整数∴只要(y−n!)为n!的因子,就有原方程的一组解​
通过分析,就可以把原问题转化为求 n ! n! n!的因子数

代码实现

由唯一分解定理,我们只需要解出n!的质因数,balabala的一个埃氏筛函数

int primes[1000005];//记录质因数
bool st[1000005];//标记是否为质数
int cnt;
int n;
long long ans=1;
void prime_set(int n){st[1]=1;for (int i=2;i<=n;i++){if (!st[i])primes[++cnt]=i;for (int j=1;j<=cnt&&primes[j]*i<=n;j++){st[primes[j]*i]=1;if (i%primes[j]==0){break;}}}
}

通过唯一分解定理的另一个公式,即
n 的因子数 = ∏ i = 0 质因子个数 质因子 i 的个数 + 1 n的因子数=\prod\limits_{i=0}^{质因子个数}质因子i的个数+1 n的因子数=i=0∏质因子个数​质因子i的个数+1
就可以得到答案了

prime_set(n);
for (int i = 1; i <= cnt; i++){int s = 0;for (int j=n;j;j/=primes[i]){s+=j/primes[i];}ans=1ll*ans*(s<<1|1)%P;//1ll用来防止数据溢出
}
printf("%lld",ans);

Code

#include<bits/stdc++.h>
#define P 1000000007
using namespace std;
int primes[1000005];
bool st[1000005];
int cnt;
int n;
long long ans=1;
void prime_set(int n){st[1]=1;for (int i=2;i<=n;i++){if (!st[i])primes[++cnt]=i;for (int j=1;j<=cnt&&primes[j]*i<=n;j++){st[primes[j]*i]=1;if (i%primes[j]==0){break;}}}
}
int main(){scanf("%d",&n);prime_set(n);for (int i = 1; i <= cnt; i++){int s = 0;for (int j=n;j;j/=primes[i]){s+=j/primes[i];}ans=1ll*ans*(s<<1|1)%P;}printf("%lld",ans);return 0;
}

#886.[Violet5]樱花题解相关推荐

  1. 洛谷 [樱花] 题解

    [樱花]题解 题目背景 又到了一年樱花盛开的时节.Vani 和妹子一起去看樱花的时候,找到了一棵大大的樱花树,上面开满了粉红色的樱花.Vani 粗略估计了一下,一共有足足 n!n! 片花瓣. Vani ...

  2. BZOJ3527: [Zjoi2014]力

    BZOJ3527: [Zjoi2014]力 Description 给出n个数qi,给出Fj的定义如下: 令Ei=Fi/qi,求Ei. Input 第一行一个整数n. 接下来n行每行输入一个数,第i行 ...

  3. 背包问题常见解题策略与例题解析

    背包问题作为常见的一种Dp 题目的变法多种多样 然而只要你理解透了背包的做法和各种优化 模型就显而易见了 千万不要似懂非懂 如果还有疑虑可以参考我的另一篇文章 背包九讲--全篇详细理解与代码实现 常见 ...

  4. PTA 天梯赛 7-2 樱花对梧桐 C语言AC题解(15 分)

    每年樱花季临沂大学绵延5公里樱花长廊美醉了,将军园.星海湖.科技楼.下沉广场均成了观赏醉美樱花海的"打卡地". 但是一到夏季酷热难当,为了全校师生能够免于暴晒,学校决定将主路一侧的 ...

  5. 解题报告(五)组合计数(ACM / OI)超高质量题解

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  6. bzoj4027,[HEOI2015]兔子与樱花

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4027 Description 很久很久之前,森林里住着一群兔子.有一天,兔子们突然决定 要 ...

  7. 一句话题解(20170801~20170125)

    8.1 bzoj 4720 noip2016 换教室 floyd预处理+期望(薛定谔的猫) bzoj 4318 OSU! 三次函数期望值 从一次.二次推得 8.2 bzoj 1076 状压+期望DP ...

  8. LeetCode 力扣算法题解汇总,All in One

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: https://fuxuemingzhu.cn 关键词:LeetCode,力扣,算法,题解,汇总,解析 把自己刷过的所有题目做一个整理, ...

  9. 2021/4/24团队设计天梯赛L1题目集及题解

    2021/4/24团队设计天梯赛L1题目集及题解: 以下题解都是通过PTA测试的,大致保证正确性: 查看题目戳此::PTA题目集 L1题目集 L1-01 人与神(5分) L1-02 #两小时学完C语言 ...

最新文章

  1. 99%高精度、毫秒级延迟,AI便携式神经假肢让截肢14年患者运动自如
  2. 无法启动此程序,因为计算机中丢失 MSVCP120.dll。尝试安装该程序以解决此问题
  3. python训练馆_Python训练营 01
  4. 广义相对论与量子力学的矛盾
  5. git branch 为什么会进入编辑状态_Git很难,搞砸很容易,好在有神奇命令让时光倒流...
  6. 提高服务器并发量,有关系统配置的常规方法
  7. 网络知识入门:路由器基础知识全接触
  8. SQL基本语法 case when 应用
  9. 素数问题练习_HDOJ1262
  10. 计算机管理如何格式化u盘,u盘无法格式化?0字节?教你5种方法格式化u盘,超简单!...
  11. HUAWEI OSPF配置
  12. 白话windows之四 异常处理机制(VEH、SEH、TopLevelEH...)
  13. 小米的200万不是这么好挣的!
  14. 阿里云服务器 云监控 API 调用示例
  15. ceph搭建及使用详解
  16. PADS过孔与安全间距的设置与使用
  17. 新一轮产业革命和行业转型加快,行业人才需求显著增加
  18. 测试部门KPI考核指标(绩效考核)
  19. 改动实体类后,报错java.io.InvalidClassException: XXXDTO; local class incompatibl
  20. 图像拼接(一):柱面投影+模板匹配+渐入渐出融合

热门文章

  1. 学计算机是就业班好还是升学班好,升学班和就业班应该怎么选择?
  2. 搭建Flutter项目——解决证书报错
  3. GN的使用 - GN工具
  4. STM32 USART使用奇偶校验位
  5. linux之initrd简介
  6. linux2.6内核initrd机制解析
  7. 《惢客创业日记》2018.09.09(周日) “惢客中医”该怎么做?
  8. vant-weapp 全局主题样式
  9. java实习生/应届毕业生面试大纲
  10. 人脸验证(四)--CenterLoss,损失函数改进原因