【BZOJ 2721】 2721: [Violet 5]樱花 (筛)
生活随笔
收集整理的這篇文章主要介紹了
【BZOJ 2721】 2721: [Violet 5]樱花 (筛)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
2721: [Violet 5]櫻花
Time Limit:?5 Sec??Memory Limit:?128 MBSubmit:?599??Solved:?354
Description
Input
Output
Sample Input
Sample Output
HINT
Source
interviewstreet--EQUATIONS
?
?
【分析】
之前推出來然后幾天直接打然后把$n!^2$的約數記成$n^2$的約數也是醉、、
先通分。
則$(x+y)*n!=x*y$
設$g=gcd(x,y)$
則$(x'+y')*n!=x'*y'*g$
顯然$gcd(x'+y',x')=gcd(x'+y',y')=1$
所以$x'*y'|n!$ 、$(x'+y')|g$
設$g=k(x'+y')$,則$n!=x'*y'*k$
枚舉$n!$的互質約數對$(x',y')$,則k就確定了,所以只是問$n!$的互質約數對的個數。
把$n!$分解質因數,假設$n!=p1^{r1}+p2^{r2}+...+pn^{rn}$
$f[i]$表示前i個p對答案的貢獻,則$f[i]=f[i-1]*(2*ri+1)$
? 則答案就等于$\Pi (2*ri+1)$,也就是$(n!)^{2}$的約數個數。【別人好像直接推出這個。。。?
1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<iostream> 5 #include<algorithm> 6 #include<vector> 7 using namespace std; 8 #define Maxn 1000010 9 #define Mod 1000000007 10 #define LL long long 11 12 int n; 13 int pri[Maxn],pl,mn[Maxn]; 14 bool vis[Maxn]; 15 void init() 16 { 17 memset(vis,0,sizeof(vis)); 18 for(int i=2;i<=n;i++) 19 { 20 if(!vis[i]) pri[++pl]=i,mn[i]=i; 21 for(int j=1;j<=pl;j++) 22 { 23 if(i*pri[j]>n) break; 24 vis[i*pri[j]]=1; 25 mn[i*pri[j]]=pri[j]; 26 if(i%pri[j]==0) break; 27 } 28 } 29 } 30 31 int sm[Maxn]; 32 void cal(int x) 33 { 34 if(x==1) return; 35 sm[mn[x]]++; 36 cal(x/mn[x]); 37 } 38 39 int main() 40 { 41 int ans=1; 42 scanf("%d",&n); 43 init(); 44 memset(sm,0,sizeof(sm)); 45 for(int i=1;i<=n;i++) cal(i); 46 for(int i=2;i<=n;i++) if(sm[i]) ans=1LL*ans*(2*sm[i]+1)%Mod; 47 printf("%d\n",ans); 48 return 0; 49 } View Code?
?
2017-04-24?14:22:56
轉載于:https://www.cnblogs.com/Konjakmoyu/p/6754364.html
總結
以上是生活随笔為你收集整理的【BZOJ 2721】 2721: [Violet 5]樱花 (筛)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MongoDB入门_MongoDB安装与
- 下一篇: 使用Nodejs实现的小说爬虫