【BZOJ2721】[Violet 5]樱花 线性筛素数
2017-06-13 10:15
260 查看
【BZOJ2721】[Violet 5]樱花
Description
![](http://www.lydsy.com/JudgeOnline/upload/201204/T2des(5).gif)
Input
![](http://www.lydsy.com/JudgeOnline/upload/201204/T2input(5).gif)
Output
![](http://www.lydsy.com/JudgeOnline/upload/201204/T2output(4).gif)
Sample Input
2Sample Output
3HINT
![](http://www.lydsy.com/JudgeOnline/upload/201204/T2hint(4).gif)
题解:
![](https://images2015.cnblogs.com/blog/1077980/201706/1077980-20170613101211806-1266941119.png)
,所以就是求(n!)2的约数个数
又有一个结论,若n=Πpi^ei,那么n的约数个数就是Π(ei+1),所以我们只需要筛出1-n 的所有素数,再分别计算每个素数的贡献就行了。
#include <cstdio> #include <cstring> #include <iostream> #define mod 1000000007 using namespace std; typedef long long ll; const int maxn=1000010; bool np[maxn]; int num; int pri[maxn/10]; ll n,ans,sum; int main() { scanf("%lld",&n); ll i,j; for(i=2;i<=n;i++) { if(!np[i]) pri[++num]=i; for(j=1;j<=num&&i*pri[j]<=n;j++) { np[i*pri[j]]=1; if(i%pri[j]==0) break; } } ans=1,sum=0; for(i=1;i<=num;i++) { for(sum=0,j=pri[i];j<=n;j=j*pri[i]) sum=(sum+n/j)%mod; ans=ans*(2*sum+1)%mod; } printf("%lld",ans); return 0; }
相关文章推荐
- bzoj 2721: [Violet 5]樱花 线性筛
- bzoj 2721: [Violet 5]樱花 (线性筛+质因数分解)
- [BZOJ 2721] [Violet 5] 樱花 【线性筛】
- 2721: [Violet 5]樱花 思路题 线性筛素数
- bzoj2721 [Violet 5]樱花
- 【bzoj2721】【Violet 5】樱花【数论】
- BZOJ 2721: [Violet 5]樱花
- 【BZOJ-2721】樱花 线性筛 + 数学
- BZOJ2721 [Violet 5]樱花
- BZOJ 2721 Violet 5 樱花 数论
- BZOJ_2721_[Violet 5]樱花_数学
- [BZOJ2721][Violet 5]樱花(数论)
- [bzoj2721][Violet 5]樱花
- Bzoj 2721 [Violet 5]樱花 [数论]
- 【bzoj2721】[Violet 5]樱花 数论
- 【bzoj2721】[Violet 5]樱花
- 【BZOJ 2721】 2721: [Violet 5]樱花 (筛)
- BZOJ 2721 [Violet 5]樱花
- 【筛法求素数】【质因数分解】bzoj2721 [Violet 5]樱花
- 【Violet 5】【BZOJ2721】樱花