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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

NOIP模拟测试30「return·one·magic」

發(fā)布時間:2023/12/2 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NOIP模拟测试30「return·one·magic」 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

magic

題解

首先原式指數(shù)肯定會爆$long$ $long$

首先根據(jù)歐拉定理我們可以將原式換成$N^{\sum\limits_{i=1}^{i<=N} [gcd(i,N)==1] C_{G}^{i}? \%phi(p)}\%p$

根據(jù)歐拉函數(shù)是積性的得出$phi(54184622)=phi(2)*phi(27092311)$

然后$phi(27092311)=27092310$? $phi(2)=1$所以$phi(54184622)=27092310$

于是我們現(xiàn)在要求的就是$N^{\sum\limits_{i=1}^{i<=N} [gcd(i,N)==1] C_{G}^{i}? \%27092310}\%p$

$27092310=2*3*5*7*129011$然后裸的$crt$求組合數(shù)板子求就完了

注意:你要預(yù)處理出階乘和逆元,否則會超時

代碼

#include<bits/stdc++.h> #define ll long long #define A 333333 ll k,p,n,g; //phi(54184622)=27092310 //27092310=2*3*5*7*129011 ll w[7]={0,2,3,5,7,129011,54184622},jie[6][A],ni[6][A],dl[A],b[A]; ll exgcd(ll a,ll b,ll &x,ll &y){if(b==0){x=1;y=0;return a;}ll gcd=exgcd(b,a%b,x,y);ll t=x;x=y;y=t-a/b*y;return gcd; } ll meng(ll x,ll k,ll cix){ll ans=1;for(;k;k>>=1,x=x*x%w[cix])if(k&1)ans=ans*x%w[cix];return ans; } ll china(){ll x,y,a=0,m,n=1;for(ll i=1;i<=5;i++)n*=w[i];for(ll i=1;i<=5;i++){m=n/w[i];exgcd(w[i],m,x,y);a=(a+y*m*b[i])%n;}if(a>0) return a;return a+n; } ll gcd(ll x,ll y){if(y==0) return x;return gcd(y,x%y); } ll jic(ll n,ll m,ll cix){if(m>n) return 0;if(m==0) return 1;return jie[cix][n]%w[cix]*ni[cix][n-m]%w[cix]*ni[cix][m]%w[cix]; } ll lucas(ll n,ll m,ll cix){if(n==0)return 1;return jic(n%w[cix],m%w[cix],cix)*lucas(n/w[cix],m/w[cix],cix)%w[cix]; } using namespace std; int main() {scanf("%lld%lld",&n,&g); for(ll i=1;i<=min(g,n);i++){if(gcd(i,n)==1)dl[++dl[0]]=i;}for(ll i=1;i<=5;i++){jie[i][0]=1;ni[i][0]=1;for(ll j=1;j<w[i];j++)jie[i][j]=jie[i][j-1]*j%w[i];ni[i][w[i]-1]=meng(jie[i][w[i]-1],w[i]-2,i);for(ll j=w[i]-2;j>=1;j--)ni[i][j]=ni[i][j+1]*(j+1)%w[i];for(ll j=1;j<=dl[0];j++)(b[i]+=lucas(g,dl[j],i))%=w[i];}ll j=china();ll k=meng(n,j,6);cout<<k<<endl;//模w「i」 剩余b「i」 } View Code

one

題解

美妙的約瑟夫問題,

范圍特別大考慮線性推

然而我懶的說了

代碼特別簡單,只是上文稍做修改

代碼

#include<bits/stdc++.h> using namespace std; #define ll int #define A 1000000 ll ans,t,n; int main(){scanf("%d",&t);while(t--){scanf("%d",&n);ans=0;for(ll i=n-1;i>=0;i--)ans=(ans+i)%(n-i+1);printf("%d\n",ans+1);} } View Code

return

題解

這是道語文題,這一定是一個語文題,一定是這樣

其實它是讓你求前趨后繼

那么這個題難點就在于怎么在作者給出題干中看出是前趨后繼

那么我們看題干

  

     $0-2^{31}$范圍內(nèi)

?

?我真的沒看出來這是求前趨后繼,$pdf$上沒給樣例解釋

轉(zhuǎn)載于:https://www.cnblogs.com/znsbc-13/p/11401052.html

總結(jié)

以上是生活随笔為你收集整理的NOIP模拟测试30「return·one·magic」的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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