【bzoj2721】[Violet 5]樱花
题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=2721
好久没做数学题了,感觉有些思想僵化,走火入魔了。
这道题就是求方程$ \frac{1}{x}+\frac{1}{y}=\frac{1}{n!} $的正整数解个数。
首先我们可以把方程化为$ (x+y)n!=xy $。。。然后就发现搞不出什么了。
但是我们可以考虑换元,因为显然$ x,y>n $,所以我们设$ y=n!+k $,然后我们就可以把方程化为$ (x+n!+k)n!=x(n!+k) $,接下来去括号并整理得:$ (n!)^{2}+kn!=xk $,于是$ x=\frac{(n!)^{2}}{k}+n! $。
我们可以发现,$ x,y,n! $都是正整数,因此由$ y=n!+k $且$ y>n $可得$ k $也是正整数,而由$ x=\frac{(n!)^{2}}{k}+n! $可得$ \frac{(n!)^{2}}{k} $是正整数,所以k必为$ (n!)^2 $一因数。并且$ x,y $和$ k $的值是一一对应的,所以问题就变成了求$ (n!)^2 $的因数个数。
具体做法可以用筛法筛出质数,然后对于每个质数,算出它们的每个幂对答案的贡献。
代码:
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<ctime>
#include<algorithm>
#include<queue>
#include<vector>
#include<map>
#define ll long long
#define ull unsigned long long
#define max(a,b) (a>b?a:b)
#define min(a,b) (a<b?a:b)
#define lowbit(x) (x& -x)
#define mod 1000000007
#define inf 0x3f3f3f3f
#define eps 1e-18
#define maxn 500010
inline ll read()
{
ll tmp=; char c=getchar(),f=;
for(;c<''||''<c;c=getchar())if(c=='-')f=-;
for(;''<=c&&c<='';c=getchar())tmp=(tmp<<)+(tmp<<)+c-'';
return tmp*f;
}
int p[],mn[];
ll cnt[];
int n,tot=;
void eular(int n)
{
mn[]=;
for(int i=;i<=n;i++){
if(!mn[i])p[++tot]=i,mn[i]=tot;
for(int j=;j<=mn[i]&&i*p[j]<=n;j++)mn[i*p[j]]=p[j];
}
//for(int i=1;i<=n;i++)
// if(p[mn[i]]==i)printf("%d\n",i);
}
int main()
{
n=read();
eular(n);
for(int i=;i<=tot;i++){
cnt[i]=;
for(ll j=p[i];j<=n;j*=p[i])cnt[i]+=n/j;
cnt[i]%=mod;
}
ll ans=;
for(int i=;i<=tot;i++)
ans=ans*(cnt[i]*+)%mod;
printf("%lld\n",ans);
return ;
}
bzoj2721
【bzoj2721】[Violet 5]樱花的更多相关文章
- 【筛法求素数】【质因数分解】bzoj2721 [Violet 5]樱花
http://www.cnblogs.com/rausen/p/4138233.html #include<cstdio> #include<iostream> using n ...
- BZOJ2721 [Violet 5]樱花
先令n! = a: 1 / x + 1 / y = 1 / a => x = y * a / (y - a) 再令 k = y - a: 于是x = a + a ^ 2 / k => ...
- 2018.10.26 bzoj2721: [Violet 5]樱花(数论)
传送门 推一波式子: 1x+1y=1n!\frac 1 x+\frac 1 y=\frac 1 {n!}x1+y1=n!1 =>xy−x∗n!−y∗n!xy-x*n!-y*n!xy−x∗n ...
- 【BZOJ2721】[Violet 5]樱花 线性筛素数
[BZOJ2721][Violet 5]樱花 Description Input Output Sample Input 2 Sample Output 3 HINT 题解:,所以就是求(n!)2的约 ...
- BZOJ_2721_[Violet 5]樱花_数学
BZOJ_2721_[Violet 5]樱花_数学 Description Input Output $\frac{1}{x}+\frac{1}{y}=\frac{1}{m}$ $xm+ym=xy$ ...
- 【BZOJ 2721】 2721: [Violet 5]樱花 (筛)
2721: [Violet 5]樱花 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 599 Solved: 354 Description Input ...
- 2721: [Violet 5]樱花
2721: [Violet 5]樱花 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 547 Solved: 322[Submit][Status][D ...
- bzoj 2721[Violet 5]樱花 数论
[Violet 5]樱花 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 671 Solved: 395[Submit][Status][Discuss ...
- Bzoj2721 [Violet]樱花(筛法)
题面 题解 首先化一下式子 $$ \frac 1x+\frac 1y=\frac 1{n!} \Rightarrow \frac {x+y}{xy}=\frac 1{n!} \Rightarrow ( ...
随机推荐
- Android 动画fillAfter和fillBefore
fillBefore是指动画结束时画面停留在此动画的第一帧; fillAfter是指动画结束是画面停留在此动画的最后一帧. Java代码设置如下: /*****动画结束时,停留在最后一帧******* ...
- JavaWeb温习之Cookie对象
1. 会话的概念 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话.有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学曾 ...
- Egret Wing4.1.0 断点调试
一 双击代码行号左侧打断点 二 选择调试视图工具栏. 三 点击开始调试 1 wing内置播放器调试 选择此项进行调试会打开Egret内置播放器,我这里这个版本该选项无法进行断点... 2 使用本机 ...
- 项目中启动另外的一个app
NSMutableString *webViewContent = [[NSMutableStringalloc] init]; [webViewContent appendString:@" ...
- jps命令用法
jps是jdk提供的一个查看当前java进程的小工具, 可以看做是JavaVirtual Machine Process Status Tool的缩写.非常简单实用. 命令格式:jps [option ...
- wap启用宏
vba for wps office是使用wps的时候开启宏需要的VBA安装包,安装好这个插件就可以开启wps的宏功能了,重新打开WPS Excel,可以看到上面的工具栏中宏选项变成可选的就成功了 1 ...
- 沈阳网络赛I-Lattice's basics in digital electronics【模拟】
42.93% 1000ms 131072K LATTICE is learning Digital Electronic Technology. He is talented, so he under ...
- SVN跨版本库迁移目录并保留提交日志
现在有一份代码code在版本库reposA/dirB/下,现在想把它移动到reposB/dirAA/下,本来打算交给SA做,没想到SA似乎 也不太懂的样子.于是,自己在VPS搭建了一个svnserve ...
- 记一次踩坑:使用ksoap-android时造成的okhttp依赖冲突问题
项目中需要调用webservice接口,android SDK中并没有直接访问webservice接口的方法,于是我引入了ksoap-android的jar包,来实现访问webservice接口.刚开 ...
- SSL默认端口时,用http://ip:port/访问出错(转)
add by zhj: 其实就是保证https访问的port与服务器监听的port是同一port 原文:http://blog.csdn.net/ikmb/article/details/386370 ...