题目链接: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] 樱花 【线性筛】的更多相关文章

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

    2721: [Violet 5]樱花 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 599  Solved: 354 Description Input ...

  2. 【BZOJ2721】[Violet 5]樱花 线性筛素数

    [BZOJ2721][Violet 5]樱花 Description Input Output Sample Input 2 Sample Output 3 HINT 题解:,所以就是求(n!)2的约 ...

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

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

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

  5. 【BZOJ-2721】樱花 线性筛 + 数学

    2721: [Violet 5]樱花 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 499  Solved: 293[Submit][Status][D ...

  6. 2721: [Violet 5]樱花

    2721: [Violet 5]樱花 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 547  Solved: 322[Submit][Status][D ...

  7. BZOJ 2693: jzptab [莫比乌斯反演 线性筛]

    2693: jzptab Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1194  Solved: 455[Submit][Status][Discu ...

  8. 2721: [Violet 5]樱花|约数个数

    先跪一发题目背景QAQ 显然x,y>n!,然后能够设y=n!+d 原式子能够化简成 x=n!2d+n! 那么解的个数也就是n!的因子个数,然后线性筛随便搞一搞 #include<cstdi ...

  9. [bzoj 2190][SDOI2008]仪仗队(线性筛欧拉函数)

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2190 分析:就是要线性筛出欧拉函数... 直接贴代码了: memset(ans,,sizeof ...

随机推荐

  1. 【iOS程序启动与运转】- RunLoop个人小结

    学习iOS开发一般都是从UI开始的,从只知道从IB拖控件,到知道怎么在方法里写代码,然后会显示什么样的视图,产生什么样的事件,等等.其实程序从启动开始,一直都是按照苹果封装好的代码运行着,暴露的一些属 ...

  2. 对Cookie进行增删改查

    public class CookieServletDemo extends HttpServlet { public void doGet(HttpServletRequest request, H ...

  3. 集合练习——List部分

    利用ArrayList 1.存储多个员工信息,包括工号,姓名,年龄,入职时间,逐条打印所有员工姓名,并输出员工个数. package CollectionPart; import java.util. ...

  4. [Form builder]:about SYSTEM.MESSAGE_LEVEL

    If you want to suppress error messages then you have to set a system variable :system.message_level. ...

  5. zzzzw_在线考试系统①准备篇

    在弄完购物系统之后,小博也了解了解怎么用struts这个框架捣鼓一个在线考试系统 购物系统用的是MVC模式,现在这个struts2原理上也是基于MVC模式的.那么要做这个东西之前先了解一下难点在哪里 ...

  6. C#中params使用

    1.参数被params修饰即为可变参数,params只能修饰一维数组. 2.给可变参数赋值的时候,可以直接传递数组的元素. 3.在调用的时候,会自动将这些元素封装为一个数组,并将数组传递. 4.可变参 ...

  7. python tornado+mongodb的使用

    tornado tar xvzf tornado-1.2.1.tar.gz cd tornado-1.2.1 python setup.py build sudo python setup.py in ...

  8. [转] c# 数据类型占用的字节数

    http://www.cnblogs.com/laozuan/archive/2012/04/24/2467888.html

  9. ActionBar只显示图标不显示文字

    问题:ActionBar菜单项android:showAsAction设置为android:showAsAction="always|withText"或者android:show ...

  10. python常用函数 库 转

    可能经常用到的标准模块和第三方常用的50个库 本文由python培训班授课老师整理 数学计算:     numbers - Numeric abstract base classes     math ...