题目背景

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

Vani 轻柔地对她说:“你知道吗?这里面的一片花瓣代表着你,我从里面随机摘一片,能和你相遇的概率只有1/n!那么小。我该是多么的幸运,才让你今天这么近地站在我面前。

相信我,我一定会把这亿万分之一的缘分变为永远。”

粉红的樱花漫天飞舞,妹子瞬间被 Vani 感动了。她轻轻地牵起了他的手,和他相依而 坐。这时,她突然看到田野的尽头也长着两棵樱花树,于是慢慢地把头靠在 Vani 的肩上,在他耳边低语:“看到夕阳里的那两棵樱花树了吗?其中一棵树上的一片花瓣是你,另一棵树上的一片花瓣是我,如果有人从这棵摘下一片,从那棵采下一瓣,我们相遇的概率会不会正好是1/n!呢?”

Vani 的大脑飞速运作了一下,立即算出了答案。正要告诉妹子,她突然又轻轻地说:“以 前你总是说我数学不好,但是这种简单的题我还是会算的。你看假如左边那棵树上有 x片花

瓣,右边那个有 y 片花瓣,那么我们相遇的概率不就是1/x+1/y么,不过有多少种情况能使

它正好可以等于1/n!呢?这个你就帮我算一下吧~”

显然,面对天然呆的可爱妹子,Vani 不但不能吐槽她的渣数学,而且还要老老实实地 帮她算出答案哦。

题目描述

求不定方程

​1/x+1/y=1/n!

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

输入格式

一个整数n。

输出格式

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

输入输出样例

输入 #1
2

输出 #1
3

说明/提示

样例说明

共有三个数对(x,y)满足条件,分别是 (3,6)(4,4)和(6,3)。

数据范围与约定 对于 30% 的数据,保证n≤100。

思路

共有三个数对(x,y)满足条件,分别是 (3,6)(4,4)和(6,3)。

对(n!)^2唯一分解的时候,最暴力的做法是直接分解,也就是对每一个n,枚举每个小于sqrt(n)的质数,时间复杂度为O(sqrt(n)*)

但是我们不需要那么暴力

可以利用线性筛里面处理出来的数组v(v[i]是i的最小质因子)来加快我们对于每一个数唯一分解的速度

对于一个数,我们可以每次除去它的最小质因子,并且累加记录,然后对于计算后得到的结果继续除其最小质因子,直到把这个数除成1为止

这样的话,时间复杂度降为O(nlogn),这样就可以过了

代码:

#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;const int N=1000010;
const int Mod=1e9+7;int n,ans;
long long fj[N],v[N];
long long p[N],tot=0;void work(int n) {memset(p,0,sizeof(p));memset(v,0,sizeof(v));tot=0;for(int i=2; i<=n; i++) {if(!v[i]) {v[i]=i;tot++;p[tot]=i;}for(int j=1; j<=tot; j++) {if(i*p[j]>n||v[i]<p[j])break;v[p[j]*i]=p[j];}}
}int main () {scanf("%d",&n);work(n);for(int i=1; i<=n; i++)for(int j=i; j!=1; j/=v[j]) {++fj[v[j]];fj[v[j]]%=Mod;}ans=1;for(int i=1; i<=n; i++)ans=(ans*(fj[i]<<1|1))%Mod;printf("%lld\n",ans);return 0;
}

转载于:https://www.cnblogs.com/mysh/p/11297314.html

P4167 [Violet]樱花相关推荐

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

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

  2. [Violet]樱花

    [Violet]樱花 BZOJ luogu 一道有意思的推式子题 \[\frac{1}{x}+\frac{1}{y}=\frac{1}{N!}\] \[\frac{x+y}{xy}=\frac{1}{ ...

  3. 【[Violet]樱花】

    就是化柿子 我们求 \[\frac{1}{x}+\frac{1}{y}=\frac{1}{n!}\] 的正整数解的个数 喜闻乐见的化柿子了 \[\frac{x+y}{xy}=\frac{1}{n!}\ ...

  4. 触觉互联网_触觉服是VR的未来吗?

    触觉互联网 Haptic suits represent the next step towards true immersion in virtual reality gaming. Virtual ...

  5. 好消息轮询_在大流行中寻找数据科学工作而不是好消息

    好消息轮询 There's good news if you've been thinking of getting into the field of data science or have be ...

  6. 【BZOJ 2721】 2721: [Violet 5]樱花 (筛)

    2721: [Violet 5]樱花 Time Limit: 5 Sec  Memory Limit: 128 MB Submit: 599  Solved: 354 Description Inpu ...

  7. bzoj2721 [Violet 5]樱花

    分析:这道题对于我这种蒟蒻来说还是很有难度啊. 思路非常巧妙,既然不定方程要有有限个数解,那么这个肯定会对解有所限制,也就是本题中的正整数.这个时候我们要表示出方程中的一个根x,设z = n!,那么x ...

  8. 1624 Violet 5 樱花(Bzoj2721 LOJ10202 LUOGU1445 提高+/省选-) 交叉相乘 阶乘质因数分解技巧 约数个数计算

    总目录 在线测评地址(ybt) 在线测评地址(LOJ) 在线测评地址(LUOGU) 1.交叉相乘 阶乘质因数分解技巧 约数个数计算 ybt 通过 测试点 结果 内存 时间 测试点1 答案正确 604K ...

  9. ikbc机械键盘打字出现重复_抖音开啤酒小姐姐同款面具,ikbc白无垢樱花机械键盘开箱体验...

    现如今机械键盘同质化越来越严重,就跟智能手机领域一样,不看看背面的LOGO的话,还真没法认出是哪家的.目前,对于绝大多数人来说,还是属于颜值党的,总之,帅就完事了.外设圈很小,愿意掏几百块买一把键盘的 ...

最新文章

  1. 有限算法下的技术实现路线
  2. Package name must have at least two identifiers 解决办法
  3. plsql中的if判断
  4. SkyWalking集成与案例
  5. iOS手势UIGustureRecognizer
  6. nodejs+mongodb+vue前后台配置ueditor
  7. “衰亡”的雅虎:30 亿用户账号全部泄漏还能怎么活?
  8. 关于解决error A2004: symbol type conflict错误
  9. CANape a2l文件的编辑教程
  10. windows bat文件更改为 exe文件
  11. matlab矩阵乘法不同行,矩阵乘法在numpy/matlab/数学上的不同
  12. 什么是银行的表内表外业务?
  13. ipcs中的dest是什么意思
  14. HHKB 键盘 配置Mac 的 command 和 切换输入法
  15. python3 爬虫学习:自动给你心上人的微博点赞(一)
  16. mtatlas mysql_MHA-Atlas-MySQL高可用(下)
  17. 微信小程序-组件的生命周期
  18. 讲讲简单的电源隔离和信号地,电源地的处理
  19. TCP/UDP常用端口列表
  20. 蓝桥杯 算法训练 Cowboys

热门文章

  1. 数字三角形的多种解法思路
  2. 微信读书中总显示服务器错误,微信读书充值遇到问题怎么办 微信读书充值遇到问题解决方法...
  3. CF140C New Year Snowmen(贪心+优先队列)
  4. 《微信公众平台开发最佳实践》——2.1 新浪SAE应用
  5. 如何锻炼自己的逻辑思维
  6. 集结Android开发里的各种大神
  7. Android WIFI密码查看器实例(在获取Root权限下查看系统文件)
  8. 图数据库|如何从零到一构建一个企业股权图谱系统
  9. php上传文件失败解决方案
  10. 少有人走的路 - 读书笔记