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

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

生活随笔

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

编程问答

2017ICPCECIC C.A math problem(高次剩余)

發(fā)布時(shí)間:2024/4/17 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2017ICPCECIC C.A math problem(高次剩余) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目鏈接:https://oj.neu.edu.cn/contest/70/problem/3

分析:

   這題略坑。。O(nlogn)過(guò)不了,實(shí)際上t(1)=(p-1)/gcd(k,p-1),O(logp)可以得到t(1)。

1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<vector> 5 using namespace std; 6 vector<int> vec; 7 const int maxn=1e5+5,MOD=1e9+7; 8 typedef unsigned long long ll; 9 int k,p,n; 10 bool have[maxn]; 11 int pri[maxn],len=0; 12 void CalPri(){ 13 int maxn=100; 14 bool Is_pri[maxn]; 15 memset(Is_pri,-1,sizeof(Is_pri)); 16 for(int i=2;i<maxn;i++){ 17 if(Is_pri[i]) 18 pri[len++]=i; 19 for(int j=0;j<len&&pri[j]*i<maxn;j++){ 20 Is_pri[i*pri[j]]=false; 21 if(i%pri[j]==0) 22 break; 23 } 24 } 25 } 26 ll qpow(int a,int n,int mod){ 27 ll res=1,y=a,k=1; 28 while(k<=n){ 29 if(k&n){ 30 res=(res*y)%mod; 31 } 32 y=(y*y)%mod; 33 k<<=1; 34 } 35 return res; 36 } 37 int gcd(int a,int b){ 38 if(a==0)return b; 39 else return gcd(b%a,a); 40 } 41 int main(){ 42 //freopen("e:\\in.txt","r",stdin); 43 while(scanf("%d%d%d",&k,&p,&n)!=EOF){ 44 if(k==0){ 45 printf("1\n"); 46 continue; 47 } 48 int GCD=gcd(k,p-1); 49 ll ans; 50 memset(have,0,sizeof(have)); 51 int c=0; 52 while(k%p==0){ 53 c++; 54 k/=p; 55 } 56 ans=qpow(p,max(n-c-1,0),MOD); 57 int count=(p-1)/GCD; 58 ans=(ans*count)%MOD; 59 printf("%lld\n",ans); 60 } 61 return 0; 62 }

?官方題解:

?

轉(zhuǎn)載于:https://www.cnblogs.com/7391-KID/p/7224966.html

總結(jié)

以上是生活随笔為你收集整理的2017ICPCECIC C.A math problem(高次剩余)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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