日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

P4562-[JXOI2018]游戏【数论,组合数学】

發(fā)布時(shí)間:2023/12/3 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 P4562-[JXOI2018]游戏【数论,组合数学】 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

正題

題目鏈接:https://www.luogu.org/problemnew/show/P4562


題目大意

l~rl\sim rlr的變化,每次訪問(wèn)第iii個(gè)那么iii的倍數(shù)就不用訪問(wèn)了。對(duì)于一個(gè)順序sss,定義t(s)t(s)t(s)表示按這個(gè)順序訪問(wèn)玩前t(s)t(s)t(s)個(gè)就都不用訪問(wèn)了。求所有順序的t(s)t(s)t(s)之和。


解題思路

l==1l==1l==1時(shí)那么只要訪問(wèn)111就好了,所以答案是r!?(r+1)2\frac{r!*(r+1)}{2}2r!?(r+1)?
l!=1l!=1l!=1時(shí)我們用質(zhì)數(shù)篩的方法計(jì)算有多少個(gè)是需要訪問(wèn)的,定義個(gè)數(shù)為mmm,然后我們用iii枚舉t(s)t(s)t(s),首先這樣的序列有m?Cn?in?sum?(i?1)!?(n?i)!m*C^{n-sum}_{n-i}*(i-1)!*(n-i)!m?Cn?in?sum??(i?1)!?(n?i)!
Cn?in?sumC^{n-sum}_{n-i}Cn?in?sum?表示后面不用選的方案數(shù),然后(n?i)!(n-i)!(n?i)!將其排列,(i?1)!(i-1)!(i?1)!表示前面的排列順序
然后乘上一個(gè)iii表示t(s)t(s)t(s)


codecodecode

#include<cstdio> #include<algorithm> #define ll long long using namespace std; const ll N=1e7+10,XJQ=1e9+7; ll l,r,fac[N],inv[N],ans,sum,n; bool v[N]; ll power(ll x,ll b){ll ans=1;while(b){if(b&1) ans=(ans*x)%XJQ;x=(x*x)%XJQ;b>>=1;}return ans; } int main() {scanf("%lld%lld",&l,&r);n=r-l+1;fac[0]=1;for(ll i=1;i<=r;i++)fac[i]=fac[i-1]*i%XJQ;inv[r]=power(fac[r],XJQ-2);for(ll i=r;i;i--)inv[i-1]=inv[i]*i%XJQ;if(l==1){printf("%lld",fac[r]*(r+1)%XJQ*power(2,XJQ-2)%XJQ);return 0;}for(ll i=l;i<=r;i++){if(v[i]) continue;sum++;for(ll j=i*2;j<=r;j+=i)v[j]=1;}for(ll i=sum;i<=n;i++)(ans+=sum*fac[n-sum]%XJQ*inv[i-sum]%XJQ*fac[i]%XJQ)%=XJQ;printf("%lld",ans); }

總結(jié)

以上是生活随笔為你收集整理的P4562-[JXOI2018]游戏【数论,组合数学】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。