[BZOJ 2721] [Violet 5] 樱花 【线性筛】
题目链接:BZOJ - 2721
题目分析
题目大意:求出 1 / x + 1 / y = 1 / n! 的正整数解 (x, y) 的个数。
显然,要求出正整数解 (x, y) 的个数,只要求出使 y 为正整数的正整数 x 的个数,或者求出使 x 为正整数的正整数 y 的个数即可。
那么我们来转化一下这个式子:
通分:
(x + y) / xy = 1 / n!
n!(x + y) = xy
将 y 分离出来:
n!x = xy - n!y
n!x = (x - n!)y
y = n!x / (x - n!)
那么我们就是要求出,使 n!x / (x - n!) 为正整数的正整数 x 的个数。
我们换元,设 d = x - n! ,则 x = n! + d, 式子变为:
y = n!(n! + d) / d
y = (n!)^2 / d + n!
我们就是要求出使 (n!)^2 / d + n! 为正整数的 d 的个数,显然,d 是 (n!)^2 的任意一个因数。
于是问题转化为,求出 (n!)^2 的因数个数。
因数个数的计算公式:如果一个数的质因数分解为 x = p1^a1 * p2^a2 * ... * pn^an,那么
x 的因数个数为 (a1 + 1) * (a2 + 1) * ... * (an + 1)
我们要求出 (n!)^2 所含的每个质因数的幂次。
n! 含有的质因数就是 n 以内的所有质数,所以我们筛出 n 以内的所有因数,然后我们对于每个因数 pi ,枚举 n 以内的它的所有的倍数,然后暴力求出 1 ~ n 的所有数中,一共含有 pi 的幂次 ai 是多少。那么 (n!)^2 中含有这个质数的幂次就是 ai * 2 。
代码
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm> using namespace std; const int MaxN = 1000000 + 5, MaxP = 100000 + 5, Mod = 1000000007; typedef long long LL; int n, Top;
int Prime[MaxP]; bool isPrime[MaxN]; LL Ans; int main()
{
scanf("%d", &n);
for (int i = 2; i <= n; ++i) isPrime[i] = true;
isPrime[1] = false;
for (int i = 2; i <= n; ++i)
{
if (isPrime[i]) Prime[++Top] = i;
for (int j = 1; j <= Top && i * Prime[j] <= n; ++j)
{
isPrime[i * Prime[j]] = false;
if (i % Prime[j] == 0) break;
}
}
Ans = 1;
int Cnt, Temp;
for (int i = 1; i <= Top; ++i)
{
Cnt = 0;
for (int j = Prime[i]; j <= n; j += Prime[i])
{
Temp = j;
while (Temp % Prime[i] == 0)
{
Temp /= Prime[i];
++Cnt;
}
}
Ans = Ans * (LL)(Cnt * 2 + 1) % Mod;
}
cout << Ans << endl;
return 0;
}
[BZOJ 2721] [Violet 5] 樱花 【线性筛】的更多相关文章
- 【BZOJ 2721】 2721: [Violet 5]樱花 (筛)
2721: [Violet 5]樱花 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 599 Solved: 354 Description Input ...
- 【BZOJ2721】[Violet 5]樱花 线性筛素数
[BZOJ2721][Violet 5]樱花 Description Input Output Sample Input 2 Sample Output 3 HINT 题解:,所以就是求(n!)2的约 ...
- bzoj 2721[Violet 5]樱花 数论
[Violet 5]樱花 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 671 Solved: 395[Submit][Status][Discuss ...
- BZOJ 2721: [Violet 5]樱花
(X-N)(Y-N)=N^2 #include<cstdio> using namespace std; const int mod=1e9+7; int n,cnt,isprime[10 ...
- 【BZOJ-2721】樱花 线性筛 + 数学
2721: [Violet 5]樱花 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 499 Solved: 293[Submit][Status][D ...
- 2721: [Violet 5]樱花
2721: [Violet 5]樱花 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 547 Solved: 322[Submit][Status][D ...
- BZOJ 2693: jzptab [莫比乌斯反演 线性筛]
2693: jzptab Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1194 Solved: 455[Submit][Status][Discu ...
- 2721: [Violet 5]樱花|约数个数
先跪一发题目背景QAQ 显然x,y>n!,然后能够设y=n!+d 原式子能够化简成 x=n!2d+n! 那么解的个数也就是n!的因子个数,然后线性筛随便搞一搞 #include<cstdi ...
- [bzoj 2190][SDOI2008]仪仗队(线性筛欧拉函数)
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2190 分析:就是要线性筛出欧拉函数... 直接贴代码了: memset(ans,,sizeof ...
随机推荐
- Android开发之自定义圆形的ImageView的实现
android中的ImageView只能显示矩形的图片,这样一来不能满足我们其他的需求,比如要显示圆形的图片,这个时候,我们就需要自定义ImageView了,其原理就是首先获取到图片的Bitmap,然 ...
- Android_layout_note
LinearLayout线程布局 LinearLayout属性 android:orientation表示线性布局的方向 vertical: 垂直.从上往下 horizontal: 水平.从左往右 a ...
- Visual Basic|VB 6.0中文版
附加下载链接:http://xiazai.zol.com.cn/detail/3/29939.shtml?&437886-tsina-1-838-a507c04d8e448a55dd65bfc ...
- java将Excel文件(xlsx,xls)转换为csv文件
http://blog.csdn.net/bryan__/article/details/40715309
- Xcode中实现ARC和MRC混编
1.在Xcode中打开项目文件 2.选中项目名称 3.在右侧选择build phass 选项卡 4.选择 complite source 选项 5.选择要支持MRC编译的.m文件,双击 6.在弹出的框 ...
- Nginx的反向代理
先通过简单的图来说明一下正向代理和反向代理吧~ 正向代理 代理其实就是一个中介,A和B本来可以直连,中间插入一个C,C就是中介.刚开始的时候,代理多数是帮助内网client访问外网server用的(比 ...
- HDU 1619 Unidirectional TSP(单向TSP + 路径打印)
Unidirectional TSP Problem Description Problems that require minimum paths through some domain appea ...
- Java面向对象程序设计--与C++对比说明:系列3(Java 继承机制)
继承(inheritance)背后的核心思想是: bonus = b; } } Java没有像C++那样提供多继承机制,但提供了接口机制,在后面我们将详细探究接口机制的实现 ...
- Maven多层嵌套
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...
- (转)iOS学习之 plist文件的读写
在做iOS开发时,经常用到到plist文件, 那plist文件是什么呢? 它全名是:Property List,属性列表文件,它是一种用来存储串行化后的对象的文件.属性列表文件的扩展名为.plist ...