Luogu1445 [Violet]樱花

一句话题意:(本来就是一句话的)

求方程 $\frac{1}{X} + \frac{1}{Y} = \frac{1}{N!}$ 的正整数解的组数,其中$N \leq 10^6$

题解:

差不多是第一篇公开的题解,因为以前的太烂了,不敢发......

我们观察到提交记录发现似乎时间有从200ms+到8ms-的,然而标准题解中给出的代码就是跑的比较慢的......

所以有没有什么快一点的呢?

假设此时你已经用朴素算法A过此题

于是我们分析算法:

楼下题解的复杂度是$O(nlogn+常数的)$,平均200ms

有没有什么更快的呢?

假设我们分析到了

$A*B=(n!)*(n!)$

的时候发现最终求的就是约数个数

首先如果求m的约数个数的话,那么对m分解得到

$m=p_1^{k_1}*p_2^{k_2}...$

其中$p_1,p_2,p_3...$都是质数

那么根据乘法原理

$Ans = (k_1 + 1) * (k_2 + 1)...$

然后对于阶乘来说,对n!做质因数分解实则在分解1 * 2 * ... * n

然而这个就是朴素的做法,然而由于你实则是需要求质因数的指数,而在《初等数论》中有

$\Sigma(p \leq n, p \  is \  a \  prime)\Sigma_{k=0}^{p^k \leq n}(\lfloor \frac{n}{p^k} \rfloor)$

所以我们直接递归(或者非递归地)跑这个公式即可

实际食用:枚举质数(或打表)(在阶乘下质因数等价于质数)(O(n)),然后对于所有质数,跑公式。

n内大约有n/ln(n)个质数,然后每次做都是log的,所以复杂度为O(n/ln(n) * log(n))=O(n),常数小,瓶颈在筛质数那......

代码如下:

 //Source Code

 const int MAXN = ;
const int MODS = ; int n, tot;
int prime[MAXN];
bool is_not_prime[MAXN]; inline void Get_Prime(){
for(int i = ; i <= n; i++){
if(!is_not_prime[i])
prime[++tot] = i;
for(int j = ; j <= tot; j++){
if(i * prime[j] > n) break;
is_not_prime[i * prime[j]] = true;
if(!(i % prime[j])) break;
}
}
} inline int Get_D(const int &tar, const int &p){
if(tar < p) return ;
return tar / p + Get_D(tar / p, p);
} int main(){
Main_Init();
n = read();
Get_Prime();
long long ans = ;
for(int i = ; i <= tot; i++)
(ans *= (Get_D(n, prime[i]) << ) + ) %= MODS;
write('\n', ans);
Main_Init();
return ;
}

Luogu1445 [Violet]樱花 ---- 数论优化的更多相关文章

  1. Luogu1445 [Violet]樱花

    题面 题解 $$ \frac 1x + \frac 1y = \frac 1{n!} \\ \frac{x+y}{xy}=\frac 1{n!} \\ xy=n!(x+y) \\ xy-n!(x+y) ...

  2. luogu1445 [violet]樱花 阶乘分解

    题目大意 求方程$$\frac{1}{x}+\frac{1}{y}=\frac{1}{N!}$$的正整数解的组数. 思路 咱们把式子整理得$$xy-(x+y)N!=0$$.$xy$和$x+y$?貌似可 ...

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

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

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

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

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

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

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

  7. luoguP1445 [Violet]樱花

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

  8. bzoj 2721[Violet 5]樱花 数论

    [Violet 5]樱花 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 671  Solved: 395[Submit][Status][Discuss ...

  9. 【bzoj2721】[Violet 5]樱花 数论

    题目描述 输入 输出 样例输入 2 样例输出 3 题解 数论 设1/x+1/y=1/m,那么xm+ym=xy,所以xy-xm-ym+m^2=m^2,所以(x-m)(y-m)=m^2. 所以解的数量就是 ...

随机推荐

  1. bzoj千题计划238:bzoj3668: [Noi2014]起床困难综合症

    http://www.lydsy.com/JudgeOnline/problem.php?id=3668 这..一位一位的来就好了呀 #include<cstdio> #include&l ...

  2. python 玩具代码

    脚本语言的第一行,目的就是指出,你想要你的这个文件中的代码用什么可执行程序去运行它,就这么简单 #!/usr/bin/python是告诉操作系统执行这个脚本的时候,调用/usr/bin下的python ...

  3. 开启SSI配置使shtml支持include公用的页头页脚

    编写编写项目众多静态文件时,能像php等开发语言一样使用include将页面公有的header/footer/sidebar作为公用.独立.单一的文件引入到各页面上,这样修改这些页面公用部分时就能单独 ...

  4. JavaScript编写风格指南 (二)

    七:注释 // 频繁的使用注释有助于他人理解你的代码// 1.代码晦涩难懂// 2.可能被误认为是错误的代码// 3.必要但不明显的针对特定浏览器的代码// 4.对于对象,方法或者属性,生成文档是有必 ...

  5. header()跳转

    if ($toNews == 1) { header('Location:/ucenter/pageMailBox/2'); exit; } PHP跳转页面,用 header() 函数 定义和用法 h ...

  6. Oracle错误及解决方案

    1.ORA-00257:归档程序错误.在释放之前仅限于内部链接 问题原因:归档日志占满了空间 解决方法: .增加归档日志空间 alter system set db_recovery_file_des ...

  7. 【网络编程】使用getnameinfo()/getaddrinfo()/InetPton()

    1.简要 从前用的网络编程函数现在又做了一定的改动,报了这么3个错误. error C4996: 'inet_ntoa': Use inet_ntop() or InetNtop() instead ...

  8. Socket心跳包机制【转】

    转自:https://blog.csdn.net/xuyuefei1988/article/details/8279812 心跳包的发送,通常有两种技术 方法1:应用层自己实现的心跳包 由应用程序自己 ...

  9. Jmeter之逻辑控制器(Logic Controller)【转】

    Jmeter之逻辑控制器(Logic Controller) 前言: 1. Jmeter官网对逻辑控制器的解释是:“Logic Controllers determine the order in w ...

  10. axios笔记

    参考:http://www.cnblogs.com/Upton/p/6180512.html https://cloud.tencent.com/developer/article/1098141  ...