題解:P2485 [SDOI2011] 計算器

### 思路

本題是一個比較模板化的題目。

#### 一操作

考慮使用快速冪。

快速冪,只需要把 $k$ 變成二進制即可實現 $\Theta(\log k)$ 的時間復雜度。

實現方法:

```cpp
long long qmi(long long a,long long k,long long p){
?? ?long long res = 1;
?? ?while (k){
?? ??? ?if (k & 1){
?? ??? ??? ?res = (res * a) % p;
?? ??? ?}
?? ??? ?a = (a * a) %p;
?? ??? ?k >>= 1;
?? ?}
?? ?return res;
}
```

### 二操作

考慮使用乘法逆元,除一個數等于乘上那個數的逆元,當 $p$ 為質數時,$x$ 的逆元為 $x^{p-2}$。

計算 $x^{p-2}$ 也可以使用快速冪。

### 三操作

考慮使用 BSGS 算法來進行計算,具體實現代碼如下:

```cpp
long long bsgs(long long a,long long b,long long p){
?? ?unordered_map<long long,long long>mp;
?? ?if (1 % p == b % p){
?? ??? ?return 0;
?? ?}
?? ?long long k = sqrt(p) + 1;
?? ?for (long long i = 0,j = b % p; i < k; i ++ ){
?? ??? ?mp[j] = i;
?? ??? ?j = (long long)j * a % p;
?? ?}
?? ?long long t = 1 % p;
?? ?for (long long i = 0; i < k; i ++ ){
?? ??? ?t = (long long)t * a % p;
?? ?}
?? ?for (long long i = 1,j = t; i <= k; i ++ ){
?? ??? ?if (mp.count(j)){
?? ??? ??? ?return (long long)i * k - mp[j];
?? ??? ?}
?? ??? ?j = (long long)j * t % p;
?? ?}
?? ?return -1;
}
```

### 最終代碼

只需要把給出的那些東西合并起來即可。

```cpp
#include <bits/stdc++.h>
using namespace std;
long long qmi(long long a,long long k,long long p){
?? ?long long res = 1;
?? ?while (k){
?? ??? ?if (k & 1){
?? ??? ??? ?res = (res * a) % p;
?? ??? ?}
?? ??? ?a = (a * a) %p;
?? ??? ?k >>= 1;
?? ?}
?? ?return res;
}
long long bsgs(long long a,long long b,long long p){
?? ?unordered_map<long long,long long>mp;
?? ?if (1 % p == b % p){
?? ??? ?return 0;
?? ?}
?? ?long long k = sqrt(p) + 1;
?? ?for (long long i = 0,j = b % p; i < k; i ++ ){
?? ??? ?mp[j] = i;
?? ??? ?j = (long long)j * a % p;
?? ?}
?? ?long long t = 1 % p;
?? ?for (long long i = 0; i < k; i ++ ){
?? ??? ?t = (long long)t * a % p;
?? ?}
?? ?for (long long i = 1,j = t; i <= k; i ++ ){
?? ??? ?if (mp.count(j)){
?? ??? ??? ?return (long long)i * k - mp[j];
?? ??? ?}
?? ??? ?j = (long long)j * t % p;
?? ?}
?? ?return -1;
}
int main(){
?? ?long long n,T;
?? ?cin >> n >> T;
?? ?if (T == 1){
?? ??? ?for (long long i = 1; i <= n; i ++ ){
?? ??? ??? ?long long a,b,p;
?? ??? ??? ?cin >> a >> b >> p;
?? ??? ??? ?cout << qmi(a,b,p) << endl;
?? ??? ?}
?? ?}?
?? ?else if (T == 2){
?? ??? ?for (int i = 1; ?i<= n; i ++ ){
?? ??? ??? ?int a,b,p;
?? ??? ??? ?cin >> a >> b >> p;
?? ??? ??? ?a %= p,b %= p;
?? ??? ??? ?if (a == 0 && b != 0){
?? ??? ??? ??? ?cout << "Orz, I cannot find x!" << endl;
?? ??? ??? ?}
?? ??? ??? ?else{
?? ??? ??? ??? ?cout << qmi(a,p - 2,p) * b % p << endl;
?? ??? ??? ?}
?? ??? ?}
?? ?}
?? ?else{
?? ??? ?for (long long i = 1; i <= n; i ++ ){
?? ??? ??? ?long long a,b,p;
?? ??? ??? ?cin >> a >> b >> p;
?? ??? ??? ?if (a % p == b % p){
?? ??? ??? ??? ?cout << 1 << endl;
?? ??? ??? ??? ?continue;
?? ??? ??? ?}
?? ??? ??? ?a %= p;
?? ??? ??? ?long long t = bsgs(a,b,p);
?? ??? ??? ?if (a == 0 && b == 0){
?? ??? ??? ??? ?cout << 1 << endl;
?? ??? ??? ?}
?? ??? ??? ?else if (a == 0 && b != 0){
?? ??? ??? ??? ?cout << "Orz, I cannot find x!" << endl;
?? ??? ??? ?}
?? ??? ??? ?else{
?? ??? ??? ??? ?if (t == -1){
?? ??? ??? ??? ??? ?cout << "Orz, I cannot find x!" << endl;
?? ??? ??? ??? ?}
?? ??? ??? ??? ?else{
?? ??? ??? ??? ??? ?cout << t << endl;
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ?}
?? ?}
?? ?return 0;
}
```

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

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

相關文章

重新構想E-E-A-T:提升銷售與搜索可見性的SEO策略

在2025年的數字營銷環境中&#xff0c;谷歌的E-E-A-T&#xff08;經驗、專業性、權威性、可信度&#xff09;已成為SEO和內容營銷的核心支柱。傳統的E-E-A-T優化方法通常聚焦于展示作者資質或獲取反向鏈接&#xff0c;但這些策略可能不足以應對AI驅動的搜索和日益挑剔的用戶需求…

JVM 一文詳解

目錄 JVM 簡介 JVM 中的內存區域劃分 1. 堆&#xff08;一個進程只有一份 ------ 線程共享&#xff09; 2. 棧&#xff08;一個進程可以有 N 份 ------ 線程私有&#xff09; Java 虛擬機棧&#xff1a; 本機方法棧&#xff1a; 3. 程序計數器&#xff08;一個線程可以…

小程序與快應用:中國移動互聯網的漸進式革命——卓伊凡的技術演進觀

小程序與快應用&#xff1a;中國移動互聯網的漸進式革命——卓伊凡的技術演進觀 在知乎看到很多&#xff1a;“懂王”發布的要把內行笑瘋了的評論&#xff0c;卓伊凡必須懟一下&#xff0c;真印證那句話&#xff0c;無知者無畏 一、Web與小程序的技術本質差異 1.1 瀏覽器渲染…

[SC]SystemC在GPU/CPU SoC驗證中的應用案例

SystemC在GPU/CPU SoC驗證中的應用案例 摘要:SystemC 是一種基于 C++ 的系統級建模語言,廣泛用于 SoC (System on Chip) 設計的建模和驗證,尤其在 GPU SoC 驗證中,SystemC 可用于模擬硬件模塊、系統行為和性能評估。SystemC 的主要優勢在于支持系統級抽象建模、時序…

Java 網絡安全新技術:構建面向未來的防御體系

一、Java 安全架構的演進與挑戰 1.1 傳統安全模型的局限性 Java 平臺自 1995 年誕生以來&#xff0c;安全機制經歷了從安全管理器&#xff08;Security Manager&#xff09;到 Java 平臺模塊系統&#xff08;JPMS&#xff09;的演進。早期的安全管理器通過沙箱模型限制不可信…

sonar-scanner在掃描JAVA項目時為什么需要感知.class文件

1 概述 SonarQube是一個靜態代碼分析工具&#xff0c;主要用于檢查源代碼的質量&#xff0c;包括代碼重復、潛在漏洞、代碼風格問題等。而SonarScanner是SonarQube的客戶端工具&#xff0c;負責將代碼進行形態分析&#xff0c;并將結果發送到SonarQube服務器。所以&#xff0c…

媒資管理之視頻管理

一:業務概述: 媒資管理這個模塊是我負責開發的,主要的管理對象是視頻,圖片,文檔等 包括文件的上傳,視頻的處理,文件的刪除 (在媒資管理界面,有個上傳視頻的按鈕,視頻是在媒資這上傳的,課程圖片是在內容管理) 上傳的圖片和視頻,會單獨存儲到搭建的分布式文件系…

Maven 實現多模塊項目依賴管理

&#x1f9d1; 博主簡介&#xff1a;CSDN博客專家&#xff0c;歷代文學網&#xff08;PC端可以訪問&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移動端可微信小程序搜索“歷代文學”&#xff09;總架構師&#xff0c;15年工作經驗&#xff0c;精通Java編…

nuxt項目中引入并配置 iview

安裝iview npm install iview --save注&#xff1a;想要加入其它的配置&#xff0c;可以在 nuxt.config.js 的 plugins 配置項中加入&#xff0c;同時在 plugins 文件夾下加入引入邏輯。 在nuxt.config.js文件中寫&#xff1a; {src: ~plugins/iview, ssr: true}同時新建 plugi…

BG開發者日志505:項目總體情況

1、從2024年12月中旬啟動&#xff0c;到4月底gameplay部分開發完畢&#xff0c;已經四個半月過去了。 其中大部分內容是3、4兩個月中完成的&#xff0c;量產階段。 預計6月初參加新品節&#xff0c;6月中旬發售&#xff08;比原計劃7月中旬提前一個月&#xff09;。 --------…

C++ *stream | istream / ostream / iostream 詳解

注&#xff1a;本文為 “C *stream” 相關文章合輯。 英文引文&#xff0c;機翻未校。 中文引文&#xff0c;略作重排&#xff0c;未整理去重。 如有內容異常&#xff0c;請看原文。 Understanding the Utility of Iostreams in C 理解 C 中 iostream 的用途 By Manoj Debnat…

Dagster中的Ops與Assets:數據管道構建的兩種選擇

Dagster是一個強大的數據編排平臺&#xff0c;它提供了多種工具來幫助數據工程師構建可靠的數據管道。在Dagster中&#xff0c;Ops和Assets是兩種核心概念&#xff0c;用于定義數據處理邏輯。本文將全面介紹Ops的概念、特性及其使用方法&#xff0c;特別補充了Op上下文和Op工廠…

參數包展開到初始化列表

上次寫過參數包展開和靜態斷言的使用——Accumulator-CSDN博客&#xff0c;數組是靜態定義的&#xff0c;并且遞歸展開參數包。這里改用動態數組&#xff0c;并且將參數包展開到初始化列表中&#xff0c;成為一個動態數組。 #include <stdio.h> #include <vector>…

React18組件通信與插槽

1、為DOM組件設置Props 在react中jsx中的標簽屬性被稱為Props DOM組件的類屬性&#xff0c;為了防止與js中的class屬性沖突改成了className DOM組件的style屬性 import image from "./logo.svg"; function App() {const imgStyleObj {width: 200,height: 200,};re…

GTS-400 系列運動控制器板(十四)----軟限位使用

運動控制器函數庫的使用 運動控制器驅動程序、dll 文件、例程、Demo 等相關文件請通過固高科技官網下載,網 址為:www.googoltech.com.cn/pro_view-3.html 1 Windows 系統下動態鏈接庫的使用 在 Windows 系統下使用運動控制器,首先要安裝驅動程序。在安裝前需要提前下載運動…

C++ 開發指針問題:E0158 表達式必須為左值或函數指示符

問題與處理策略 問題描述 int* ptr &10;執行上述代碼&#xff0c;報如下錯誤 E0158 表達式必須為左值或函數指示符 C2101 常量上的“&”問題原因 10 是一個字面常量&#xff0c;常量是臨時值&#xff0c;編譯器不會為它們分配可尋址的內存空間 & 取地址運算符…

前端面經-VUE3篇(二)--vue3組件知識(二)依賴注入、異步組件、生命周期、組合式函數、插件

目錄 一、依賴注入 1、 依賴注入是什么&#xff1f; 2、最基礎的使用 3、為什么使用依賴注入&#xff1f; 4、 使用 Symbol 作注入名 二、異步組件 1、什么是異步組件&#xff1f; 2、最基礎用法&#xff1a;defineAsyncComponent 3、在模板中使用異步組件 4、配置加載狀態…

頭歌數據庫課程實驗(索引與數據庫完整性)

第1關&#xff1a;創建一般索引 任務描述 本關任務&#xff1a;為 student 表按姓名升序建立索引&#xff0c;索引名為 idx_sname。 相關知識 為了完成本關任務&#xff0c;你需要掌握&#xff1a; 索引是什么&#xff1b; 索引的分類&#xff1b; 索引的創建和刪除&#…

Socket 編程 UDP

Socket 編程 UDP UDP 網絡編程V1 版本 - echo serverV2 版本 - DictServerV3 版本 - 簡單聊天室 補充參考內容地址轉換函數關于 inet_ntoa UDP 網絡編程 聲明&#xff1a;下面代碼的驗證都是用Windows作為客戶端的&#xff0c;如果你有兩臺云服務器可以直接粘貼我在Linux下的客…

c++ 二級指針 vs 指針引用

二級指針 vs 指針引用&#xff1a;深入對比與分析 在C中&#xff0c;二級指針和指針引用都可以用于修改外部指針&#xff0c;但它們在語法、安全性和使用場景上有重要區別。下面我將從多個維度進行詳細對比。 1. 基本概念 1.1 二級指針 (Pointer to Pointer) int a 10; in…