[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(java)学习笔记164:Relativelayout相对布局案例
我们看看案例代码,自己心领神会: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout ...
- javascript变量提升
提升是一种将变量和函数的声明移到函数作用域(如果不在任何函数内的话就是全局作用域)最顶部的机制. 提升影响了变量的生命周期,一个变量的生命周期包含3个阶段: 声明——创建一个新变量,例如var myV ...
- 《app研发录》第一章 重构,夜未眠笔记
1.1 重新规划android的项目结构 重新规划android的目录结构分两步: 1.建立AndroidLib类库,将与业务无关的逻辑转移到AndroidLib. acitivity存放的是 ...
- Android_Intent_passObject
方法4. 把基本的数据类型封装到一个对象中,然后通过intent传递该对象需要考虑对Person对象进行序列化 MainActivity: package com.example.day06_acti ...
- pcap支持Python2.7.8解决办法
pcap库只支持到python2.5. pip install pcap在python2.7.8找不到. 只需要将网盘的2个文件放到python安装目录下lib/site-package文件夹即可 链 ...
- Apache 配置多端口 多虚拟主机 局域网访问
\wamp\bin\apache\Apache2.4.4\conf\extra\httpd-vhosts.conf 修改如下 NameVirtualHost *:80 Documen ...
- java Spring集合
在进行输入的时候一定要给属性配置set方法,因为不设置是注入不了的. 1.list UserService.java private ArrayList arr; public ArrayList g ...
- python模块与包
模块是包括python定义和声明的文件.文件名=模块名+".py".模块名保存在全局变量__name__中. 1.模块中的执行语句,只是在导入时执行一次.这些语句通常用于初始化模块 ...
- RS485接线 - 为什么要给2线制RS485接3根线?
http://www.chipkin.com/rs485-cables-why-you-need-3-wires-for-2-two-wire-rs485/ RS485needs 3 conducto ...
- c#泛型方法重载
这里存在普通的方法Foo和泛型方法Foo,如果直接调用: 则会自动优先匹配对应的非泛型方法.输出如下: 但需要注意的是,这一匹配过程是在编译过程进行的,所以如果是通过其它泛型间接调用.则只会调用对应的 ...