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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于方程a^x=1(mod m)的最小x解

發布時間:2024/4/11 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于方程a^x=1(mod m)的最小x解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

定理:


設gcd(a,m)=1,必有正整數x,使得a^x=1(mod m),且設滿足等式的最小正整數為x0,必滿足x0|phi(m).注意m>1.

否則如果gcd(a,m)!=1,則方程a^x=1(mod m)沒有解。


典型題目:HDU1395,HDU3307,POJ3696



前面兩題很簡單,下面我們來分析POJ3696.


題目:The Luckiest number


題意:求出由全8組成的數的最短長度,使得給定的L能整除它。


分析:先分析公式,可以發現一個全由A組成的數的表示形式為:,所以全8組成的數為:。


L能整除它,則有:,亦即:,則應該先約去8與9L的最大公約數。

因為8與9互素,所以實際上就是約去8與L的最大公約數。


所以進一步有:,然后就是上面的那個定理了。


#include <iostream> #include <string.h> #include <algorithm> #include <stdio.h>using namespace std; typedef long long LL;LL dp[1000005];LL gcd(LL a,LL b) {return b? gcd(b,a%b):a; }LL phi(LL n) {LL rea=n,i;for(i=2;i*i<=n;i++){if(n%i==0){rea=rea-rea/i;while(n%i==0) n/=i;}}if(n>1)rea=rea-rea/n;return rea; }LL multi(LL a,LL b,LL m) {LL ans=0;while(b){if(b&1){ans=(ans+a)%m;b--;}b>>=1;a=(a+a)%m;}return ans; }LL quick_mod(LL a,LL b,LL m) {LL ans=1;a%=m;while(b){if(b&1){ans=multi(ans,a,m);b--;}b>>=1;a=multi(a,a,m);}return ans; }int main() {int k=1;LL L,i,m;while(cin>>L){if(L==0) break;printf("Case %d: ",k++);m=9*L/gcd(8,L);if(gcd(10,m)!=1){puts("0");continue;}LL ans=phi(m);LL size=0;for(i=1;i*i<=ans;i++){if(ans%i==0){dp[size++]=i;if(ans!=i*i) dp[size++]=ans/i;}}sort(dp,dp+size);for(i=0;i<size;i++)if(quick_mod(10,dp[i],m)==1) break;cout<<dp[i]<<endl;}return 0; }


總結

以上是生活随笔為你收集整理的关于方程a^x=1(mod m)的最小x解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。