2023牛客暑期多校訓練營9 B.Semi-Puzzle: Brain Storm

文章目錄

  • 題目大意
  • 題解
    • 求解
    • 回溯
  • 參考代碼

題目大意

給定兩個數 a , m a,m a,m ,求滿足 a u ≡ u ( m o d m ) a^u \equiv u (mod\ \ m) auu(mod??m) 的一個解。
( 1 ≤ a , m ≤ 1 0 9 , 0 ≤ u ≤ 1 0 18 ) (1\leq a,m \leq10^9 ,0\leq u\leq 10^{18}) (1a,m109,0u1018)

題解

參考了討論區 https://blog.nowcoder.net/n/576f9463036346f0a0fb04fee50fac75 的方法

求解

考慮使用歐拉定理,考慮 b > = ? p b>=\phi_p b>=?p?的情況。
a u ≡ { a u % ? m g c d ( a , u ) = 1 a u % ? i + ? m g c d ( a , u ) ! = 1 ( m o d m ) a^u\equiv\begin{cases}a^{u\% \phi_m }&gcd(a,u)=1\\a^{u\% \phi_i+\phi_m}& gcd(a,u)!=1\end{cases}(mod \ m) au{au%?m?au%?i?+?m??gcd(a,u)=1gcd(a,u)!=1?(mod?m)
定義 d = u % ? m d=u\%\phi_m d=u%?m? u % ? m + ? m u\%\phi_m+\phi_m u%?m?+?m?
k ? ? p + d = u ( k > = 0 ) k*\phi_p+d=u(k>=0) k??p?+d=u(k>=0)
則原式可以轉化為 a d ≡ d + k ? ? m ( m o d m ) a^d \equiv d+k*\phi_m (mod\ m) add+k??m?(mod?m)
移項可以得到 a d ? d ≡ k ? ? m ( m o d m ) a^d-d\equiv k*\phi_m(mod\ m) ad?dk??m?(mod?m)
? m ? x 1 + m ? y 1 ≡ g c d ( ? m , m ) ( m o d m ) \phi_m*x1+m*y1\equiv gcd(\phi_m,m) (mod \ m) ?m??x1+m?y1gcd(?m?,m)(mod?m) 是一個已知有解的同余方程
回到上一個方程想要得到解 k k k ,顯然要滿足 a d ? d = x ? g c d ( m , ? m ) , ( x > 0 ) a^d-d=x *gcd(m,\phi_m),(x>0) ad?d=x?gcd(m,?m?),(x>0)
也就是 a d ≡ d ( m o d g c d ( m , ? m ) ) a^d \equiv d (mod \ gcd(m,\phi_m)) add(mod?gcd(m,?m?))
重新得到了題目,但是模數縮小了,因此我們想到了遞歸,直到模數為 1 1 1 時直接推出答案。

回溯

假設我們已經得到了最后一組解 d = 0 d=0 d=0
求解同余方程 a d ? d ≡ k ? ? m ( m o d m ) a^d-d\equiv k*\phi_m(mod\ m) ad?dk??m?(mod?m),使用擴展歐幾里得定理,推出 x 1 x1 x1 的值,
k = x 1 ? a d ? d g c d ( m , ? m ) % m o d k=x1*\frac{a^d-d}{gcd(m,\phi_m)}\%mod k=x1?gcd(m,?m?)ad?d?%mod
由于 a d a^d ad 超出范圍,根據 a b % ( b ? c ) = a % ( b ? c ) b \frac{a}{b}\%(b*c)=\frac{a\%(b*c)}{b} ba?%(b?c)=ba%(b?c)?得出
k = x 1 ? ( a d ? d ) % m / ? m k=x1*(a^d-d)\%m/\phi_m k=x1?(ad?d)%m/?m?
再利用 k ? ? p + d = u k*\phi_p+d=u k??p?+d=u,得出結果即可。

參考代碼

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll phi(ll x)
{ll ans=x;for(int i=2;i*i<=x;i++){if(x%i==0)ans=ans/i*(i-1);while(x%i==0)x/=i;}if(x!=1)ans=ans/x*(x-1);return ans;
}
ll ksm(ll a,ll b,ll p)
{ll res=1;while(b){if(b&1)res=res*a%p;a=a*a%p;b>>=1;}return res;
}
ll exgcd(ll a,ll b,ll &x,ll &y)
{if(!b){x=1,y=0;return a;}ll k=exgcd(b,a%b,y,x);y-=a/b*x;return k;
}
int n,T;
ll a,m;
ll work(ll a,ll p)              //遞歸求解
{if(p==1)return 0;ll m=phi(p);ll b=work(a,__gcd(m,p))+m;ll x,y;ll d=exgcd(m,p,x,y);ll k=(((x*(ksm(a,b,p)-b+p))%p+p)%p/d);   //回溯求值return k*m+b;
}
int main()
{cin>>T;while(T--){scanf("%lld%lld",&a,&m);printf("%lld\n",work(a,m));}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/38058.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/38058.shtml
英文地址,請注明出處:http://en.pswp.cn/news/38058.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

玩賺音視頻開發高階技術——FFmpeg

隨著移動互聯網的普及&#xff0c;人們對音視頻內容的需求也不斷增加。無論是社交媒體平臺、電商平臺還是在線教育&#xff0c;都離不開音視頻的應用。這就為音視頻開發人員提供了廣闊的就業機會。根據這些年來網站上的音視頻開發招聘需求來看&#xff0c;音視頻開發人員的需求…

如何優雅的使用Mock Server

事出有因 昨天跟同事討論我們在用的rap2(一個集接口編寫和mock server的開源項目)和剛上線了一個easy-mock的server&#xff0c;到底哪個好用。 我們主要討論的點有個兩個&#xff1a; 接口的一致性、 編碼的無侵入性。 背景 自從前后端分離后&#xff0c;完成前后端的分工…

【計算機視覺|生成對抗】條件生成對抗網絡(CGAN)

本系列博文為深度學習/計算機視覺論文筆記&#xff0c;轉載請注明出處 標題&#xff1a;Conditional Generative Adversarial Nets 鏈接&#xff1a;[1411.1784] Conditional Generative Adversarial Nets (arxiv.org) 摘要 生成對抗網絡&#xff08;Generative Adversarial…

Windows 11 家庭中文版找不到組策略文件gpedit.msc

最近因為調整日期問題需要用到組策略文件gpedit.msc,但是發現找不到文件 在按鍵盤 winR 打開運行界面輸入 gpedit.msc 回車 Windows找不到文件’gpedit.msc’。請確定文件名是否正確后&#xff0c;再試-次。 檢查電腦Windows系統版本 是 Windows 11 家庭中文版 果斷早網上搜…

C++模板元編程入門案例

C++模板元編程(Template Metaprogramming)是一種在編譯時進行計算和代碼生成的技術,它使用C++的模板機制來實現。 下面是一個簡單的C++模板元編程的示例,展示了如何在編譯時計算一個數的階乘。 #include <iostream> template <int N> struct Factorial { …

docker 學習--02 常用命令

docker 學習–02 常用命令 文章目錄 docker 學習--02 常用命令1. 幫助啟動類命令1.1啟動docker1.2 停止docker1.3 重啟docker1.4 查看docker1.5 設置開機自啟1.6 查看docker概要信息1.7 查看docker總體幫助文檔1.8 查看docker命令幫助文檔 2. 鏡像命令2.1 列出本地主機上有的鏡…

Jmeter 參數化的幾種方法

目錄 配置元件-用戶自定義變量 前置處理器-用戶參數 配置元件-CSV Data Set Config Tools-函數助手 配置元件-用戶自定義變量 可在測試計劃、線程組、HTTP請求下創建用戶定義的變量 全局變量&#xff0c;可以跨線程組調用 jmeter執行的時候&#xff0c;只獲取一次&#xff0…

kafka 02——三個重要的kafka客戶端

kafka 02——三個重要的kafka客戶端 1. 前言1.1 關于 Kafka 的安裝1.2 常用客戶端簡介1.3 依賴 2. AdminClient2.1 Admin Configs2.2 AdminClient API2.2.1 設置 AdminClient 對象2.2.2 創建 topic 獲取 topic 列表2.2.3 刪除topic2.2.4 查看 topic 的描述信息2.2.5 查看 topi…

【復習8-13天】每天40min,我們一起用70天穩扎穩打學完《JavaEE初階》——14/70 第十四天

專注 效率 記憶 預習 筆記 復習 做題 歡迎觀看我的博客,如有問題交流,歡迎評論區留言,一定盡快回復!(大家可以去看我的專欄,是所有文章的目錄)   文章字體風格: 紅色文字表示:重難點★? 藍色文字表示:思路以及想法★?   如果大家覺得有幫助的話,感謝大家幫忙 點…

【騰訊云 TDSQL-C Serverless 產品體驗】基于TDSQL-C 存儲爬取的QQ音樂歌單數據

【騰訊云 TDSQL-C Serverless 產品體驗】基于TDSQL-C 存儲爬取的QQ音樂歌單數據 文章目錄 【騰訊云 TDSQL-C Serverless 產品體驗】基于TDSQL-C 存儲爬取的QQ音樂歌單數據前言出現的背景一、TDSQL-C數據庫是什么&#xff1f;二、TDSQL-C 的特點三、TDSQL-C的應用場景四、基于TD…

測試相關Liunx基礎知識

Linux的歷史和安裝 基本常識 Liunx目錄結果 常見

CTF之逆向之阿里巴巴

題目地址&#xff1a;http://www.shiyanbar.com/ctf/13 題目預覽&#xff1a; 解題過程&#xff1a; 1、下載附件發現是exe文件 2、使用PEid和Detect It Easy查殼 和 開發語言&#xff0c;發現沒有加殼&#xff0c;都是用C#開發的 3、C#和Java Python屬于解釋型語言&#xff…

Win10安裝GPU支持的最新版本的tensorflow

我在安裝好cuda和cudnn后&#xff0c;使用pip install tensorflow安裝的tensorflow都提示不能找到GPU&#xff0c; 為此懷疑默認暗轉的tensorflow是不帶GPU支持的。 在tensorflow官網提供了多個版本的GPU支持的windows的安裝包 https://www.tensorflow.org/install/pip?hlz…

用ChatGPT和六頂帽思考法幫助自己更好地決策和解決問題

當我們在解決復雜問題時&#xff0c;我們常常陷入單一視角的狀態。創造性思維領域的先驅愛德華德博諾&#xff0c;提出了六頂帽思考法[1]&#xff0c;這意味著我們可以從六個不同的視角來思考一個問題&#xff0c;以實現高水平決策和解決問題。 每一頂“帽子”代表不同的視角。…

阿里云國際版CDN使用教程!

當網站流量達到一定值后&#xff0c;勢必會造成網站訪問卡堵&#xff0c;這時候阿里云CDN將會一個很好的選擇&#xff0c;阿里云 CDN 是由全球分布式邊緣節點組成的虛擬網絡。阿里云 CDN 可減少源站負載&#xff0c;防止網絡擁塞&#xff0c;使用阿里云 CDN 加速圖像、小文件、…

SAP ME2L/ME2M/ME3M報表增強添加字段(包含:LMEREPI02、SE18:ES_BADI_ME_REPORTING)

ME2L、ME2M、ME3M這三個報表的字段增強&#xff0c;核心點都在同一個結構里 SE11:MEREP_OUTTAB_PURCHDOC 在這里加字段&#xff0c;如果要加的字段是EKKO、EKPO里的數據&#xff0c;直接加進去&#xff0c;啥都不用做&#xff0c;就完成了 如果要加的字段不在EKKO和EKPO這兩個…

LabVIEW控制通用工作臺

LabVIEW控制通用工作臺 用于教育目的的計算機化實驗室顯著增長&#xff0c;特別是用于運動控制的實驗室。它們代表了各種工業應用中不斷擴大的領域&#xff0c;并成為以安全的方式使用通常昂貴或獨特的實驗室設備進行實時實驗的寶貴工具。NI LabVIEW等軟件應用程序的開發和不斷…

Linux 中復制文件并保持修改時間等屬性

一、遇到的問題 Linux使用cp命令復制文件備份時&#xff0c;發現文件的修改時間變成當前時間了&#xff0c;想要保留備份文件原有的修改時間及其它文件屬性。 二、實現 1、cp命令 在 Linux 中&#xff0c;你可以使用 cp 命令來復制文件&#xff0c;并通過 -p 或 --preserve…

二進制轉字符串(小數)

題目&#xff1a; 給定一個介于0和1之間的實數&#xff08;如0.72&#xff09;&#xff0c;類型為double&#xff0c;打印它的二進制表達式。如果該數字無法精確地用32位以內的二進制表示&#xff0c;則打印“ERROR”。 示例: 輸入&#xff1a;0.625 輸出&#xff1a;"…

智慧工地源碼,互聯網+建筑工地,基于微服務+Java+Spring Cloud +Vue+UniApp開發

基于微服務JavaSpring Cloud VueUniApp MySql開發的智慧工地云平臺源碼 智慧工地概念&#xff1a; 智慧工地就是互聯網建筑工地&#xff0c;是將互聯網的理念和技術引入建筑工地&#xff0c;然后以物聯網、移動互聯網技術為基礎&#xff0c;充分應用BIM、大數據、人工智能、移…