算法日記32:埃式篩、gcd和lcm、快速冪、乘法逆元

一、埃式篩(計算質數)

1.1、概念

1.1.1、在傳統的計算質數中,我們采用單點判斷,即判斷(2~sqrt(n))是否存在不合法元素,若存在則判否,否則判是

在這里插入圖片描述

1.1.2、假設,此時我們需要求1~1000的所有質數,此方法的時間復雜度就會變成O(n*sqrt(n)),這顯然太過冗余了

在這里插入圖片描述

  • 因此,我們可以使用埃式篩

1.1.3、現在,求1~20中的所有質數,我們就可以:

  • 1)首先將0、1排除:

  • 2)創建從2到n的連續整數列表,[2,3,4,…,n];

  • 3)初始化 p = 2,因為2是最小的質數;

  • 4)枚舉所有p的倍數(2p,3p,4p,…),標記為非質數(合數);

  • 5)找到下一個 沒有標記 且 大于p 的數。如果沒有,結束運算;如果有,將該值賦予p,重復步驟4;

  • 6)運算結束后,剩下所有未標記的數都是找到的質數。
    在這里插入圖片描述

  • 此時,2是第一個質數,因此把2的倍數全部設置為1(vis[j]=1)將其全部篩出
    在這里插入圖片描述

  • 接下來,發現3為0,表示3是一個質數,因此我們把3的倍數也給篩掉
    在這里插入圖片描述

  • 因此,我們可以發現只要其沒有被其他數字篩掉,那么他就一定是質數

1.2、總結:

在這里插入圖片描述

ll vis[N];//用來判斷一個數是否被篩掉了,0->沒被篩掉,1->篩掉
void solve()
{ll n;cin>>n;vis[0]=vis[1]=1;for(ll i=2;i<=n;i++)//從2開始篩值{//從i*2開始,每次+i,當枚舉到還沒篩掉的數,篩掉for(ll j=i*i;j<=n;j+=i) {if(vis[i]==0) vis[j]=1;}}for(ll i=2;i<=n;i++) if(vis[i]==0) cout<<i<<' '; 
}

2、最大公約數(gcd)和最小公倍數(lcm)

2.1、gcd求法

2.1.1、如何求解兩個數(a,b)的最大公約數(gcd)?

  • 使用輾轉相除法
    • 首先 ,我們假設(a>b),通過數學公式不難得出:
    • 1)gcd(a,b)=gcd(a%b,b),比如gcd(18,6)=gcd(0,6)
    • 2)if(b==0)那么意味著此時的a即為最小公倍數
  • 因此,代碼可以寫成
ll gcd(ll a,ll b)	//只需記住,無論何時:a>b
{return b==0 ? a : gcd(b,a%b);
}

在這里插入圖片描述

2.2、lcm求法

2.2.1、如何求解兩個數(a,b)的最小公倍數(lcm)?

  • 只需記住一個公式即可:
a*b=gcd(a,b)*lcm(a*b);

3、快速冪

3.1、概念:求解ab

  • 1、當b為奇數時候,拆出一個a,此時,b就變成了一個偶數
  • 2、當b為一個偶數的時候,就拆出其次方項 b-->2/b
    在這里插入圖片描述

3.1.1、代碼實現

//快速冪
ll qmi(ll a,ll b,ll c)  //a ^ b % c
{int res=1;while(b){if(b&1) res=res*a%c,b--;//當b是奇數時,拆出一個a,使得 b 變成偶數else a=a*a%c,b>>=1;	//此時b為偶數,拆出一個a*a,等待下次為奇數再計算答案}return res;
}

四、乘法逆元

4.1、概念

  • 在寫題目的時候,假設我們需要表達a/b,是不好表達的,只能用浮點數來表示,因此我們就采用乘法逆元(類似于倒數 % p)來表示
    在這里插入圖片描述

4.2、那么,如何來求逆元呢?

  • 我們可以使用費馬小定理來求解
    在這里插入圖片描述

4.3、乘法逆元例題

  • 題目鏈接

在這里插入圖片描述

4.3.1、對于例題,我們可以對這個分式進行分解

在這里插入圖片描述

  • 因此,我們可以使用逆元來表示分數即可
#include<bits/stdc++.h>
using namespace std;typedef long long ll;
const int N = 2e5 + 7;
ll p=998244353;ll qmi(ll a,ll b)	//快速冪
{ll res=1;while(b){if(b&1) res=res*a%p,b--;a=a*a%p,b>>=1;}return res%p;
}ll inv(int x)	//求解x的逆元
{return qmi(x,p-2)%p;
}void solve()
{ll a,b,c,q;cin>>a>>b>>c>>q;while(q--){ll x;cin>>x;cout<<(a*x%p+b)%p*inv(c*x%p)%p<<'\n'; }
}int main()
{ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int _ = 1; cin>>_;while (_--) solve();return 0;
}

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

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

相關文章

使用 mysqldump 獲取 MySQL 表的完整創建 DDL

要獲取 MySQL 中某個表的完整創建 DDL&#xff08;僅結構&#xff0c;不含數據&#xff09;&#xff0c;可以使用 mysqldump 工具的以下命令&#xff1a; 基本命令格式 bash mysqldump -h [主機名] -u [用戶名] -p --no-data --single-transaction --routines --triggers --…

Debian 系統 Python 開發全解析:從環境搭建到項目實戰

Debian 系統 Python 開發全解析:從環境搭建到項目實戰 在當今數字化時代,Python 憑借其簡潔易讀的語法和強大的功能,成為了最受歡迎的編程語言之一。Debian 作為一款穩定、安全且開源的 Linux 操作系統,為 Python 開發提供了理想的環境。本文將詳細介紹在 Debian 系統上進…

實時技術對比:SSE vs WebSocket vs Long Polling

早期網站僅展示靜態內容&#xff0c;而如今我們更期望&#xff1a;實時更新、即時聊天、通知推送和動態儀表盤。 那么要如何實現實時的用戶體驗呢&#xff1f;三大經典技術各顯神通&#xff1a; ? SSE&#xff08;Server-Sent Events&#xff09;&#xff1a;輕量級單向數據…

【前端】es6新特性全解

第一章 簡介 1.1 ES6概述 1.1.1 ES6定義與發展歷程 1. ES6 定義 ES6 全稱 ECMAScript 6.0&#xff0c;它是 JavaScript 語言的下一代標準&#xff0c;對 JavaScript 語言進行了許多增強和擴展&#xff0c;帶來了更簡潔、更強大的語法特性。可以把 ES6 想象成是 JavaScript …

nlp中的頻率就是權重嗎

&#x1f522; 一、“頻率”是什么&#xff1f; 在 NLP 中&#xff0c;**詞頻&#xff08;frequency&#xff09;**通常指的是&#xff1a; 某個單詞或 token 在語料庫中出現的次數&#xff08;或比例&#xff09; 舉例&#xff1a; "The cat sat on the mat. The cat i…

多模態大語言模型arxiv論文略讀(九十八)

Accelerating Pre-training of Multimodal LLMs via Chain-of-Sight ?? 論文標題&#xff1a;Accelerating Pre-training of Multimodal LLMs via Chain-of-Sight ?? 論文作者&#xff1a;Ziyuan Huang, Kaixiang Ji, Biao Gong, Zhiwu Qing, Qinglong Zhang, Kecheng Zhe…

WEB安全--RCE--webshell HIDS bypass4

繼WEB安全--RCE--webshell HIDS bypass3的補充&#xff1a; 十三、時間開關 webshell&#xff1a; <?php ini_set("display_errors",1); function foo($test, $bar FSYSTEM) {echo $test . $bar; } $function new ReflectionFunction(foo); $q new ParseEr…

.NET 7 AOT 使用及 .NET 與 Go 語言互操作詳解

.NET 7 AOT 使用及 .NET 與 Go 語言互操作詳解 目錄 .NET 7 AOT 使用及 .NET 與 Go 語言互操作詳解 一、背景與技術概述 1.1 AOT 編譯技術簡介 1.2 Go 語言與 .NET 的互補性 二、.NET 7 AOT 編譯實踐 2.1 環境準備 2.2 創建 AOT 項目 2.3 AOT 編譯流程 2.4 調試信息處…

機器人--里程計

教程 輪式里程計視頻講解 里程計分類 ros--odometry 什么是里程計 里程計是一種利用從移動傳感器獲得的數據來估計物體位置隨時間的變化而改變的方法。該方法被用在許多機器人系統來估計機器人相對于初始位置移動的距離。 注意&#xff1a;里程計是一套算法&#xff0c;不…

云原生時代 Kafka 深度實踐:02快速上手與環境搭建

2.1 本地開發環境搭建 單機模式安裝 下載與解壓&#xff1a;前往Apache Kafka 官網&#xff0c;下載最新穩定版本的 Kafka 二進制包&#xff08;如kafka_2.13-3.6.0.tgz&#xff0c;其中2.13為 Scala 版本&#xff09;。解壓到本地目錄&#xff0c;例如/opt/kafka&#xff1a…

Vue Hook Store 設計模式最佳實踐指南

Vue Hook Store 設計模式最佳實踐指南 一、引言 在 Vue 3 組合式 API 與 TypeScript 普及的背景下&#xff0c;Hook Store 設計模式應運而生&#xff0c;它結合了 Vue 組合式 API 的靈活性與狀態管理的最佳實踐&#xff0c;為開發者提供了一種輕量級、可測試且易于維護的狀態…

無人機多人協同控制技術解析

一、運行方式 無人機多人點對點控制通常采用以下兩種模式&#xff1a; 1. 主從控制模式 指定一個主控用戶擁有最高優先級&#xff0c;負責飛行路徑規劃、緊急操作等關鍵指令&#xff1b;其他用戶作為觀察者&#xff0c;僅能查看實時畫面或提交輔助指令&#xff0c;需經主…

樹型表查詢方法 —— SQL遞歸

目錄 引言&#xff1a; 自鏈接查詢&#xff1a; 遞歸查詢&#xff1a; 編寫service接口實現&#xff1a; 引言&#xff1a; 看下圖&#xff0c;這是 course_category 課程分類表的結構&#xff1a; 這張表是一個樹型結構&#xff0c;通過父結點id將各元素組成一個樹。 我…

微服務難題?Nacos服務發現來救場

文章目錄 前言1.什么是服務發現2.Nacos 閃亮登場2.1 服務注冊2.2 服務發現 3.Nacos 的優勢3.1 簡單易用3.2 高可用3.3 動態配置 4.實戰演練4.1安裝 Nacos4.2 服務注冊與發現示例代碼&#xff08;以 Spring Boot 為例&#xff09; 總結 前言 大家好&#xff0c;我是沛哥兒。今天…

AStar低代碼平臺-腳本調用C#方法

修改報工表表單&#xff0c;右鍵定義彈出菜單&#xff0c;新增一個菜單項&#xff0c;并在點擊事件腳本中編寫調用腳本。 編譯腳本&#xff0c;然后在模塊代碼里面定義這個方法&#xff1a; public async Task<int> on_call_import(DataRow curRow) {PrintDataRow(cur…

python調用langchain實現RAG

一、安裝langchain 安裝依賴 python -m venv env.\env\Scripts\activatepip3 install langchainpip3 install langchain-corepip3 install langchain-openaipip3 install langchain-communitypip3 install dashscopepip3 install langchain_postgrespip3 install "psyc…

大學大模型教學:基于NC數據的全球氣象可視化解決方案

引言 氣象數據通常以NetCDF(Network Common Data Form)格式存儲,這是一種廣泛應用于科學數據存儲的二進制文件格式。在大學氣象學及相關專業的教學中,掌握如何讀取、處理和可視化NC數據是一項重要技能。本文將詳細介紹基于Python的NC數據處理與可視化解決方案,包含完整的代…

ORB-SLAM2學習筆記:ComputeKeyPointsOctTree分析過程記錄

ComputeKeyPointsOctTree是ORB特征提取器中計算關鍵點的部分&#xff0c;特別是使用八叉樹&#xff08;OctTree&#xff09;方法進行關鍵點分布。 首先&#xff0c;函數參數是vector<vector的引用allKeypoints&#xff0c;用來存儲各層的關鍵點。代碼開頭調整了allKeypoint…

LeetCode Hot100(多維動態規劃)

62. 不同路徑 比較板子的dp&#xff0c;實際上就是到達一個點有兩種方式&#xff0c;從上面來或者是左邊&#xff0c;加起來就可以了 class Solution {public int uniquePaths(int m, int n) {int [][]arr new int[m2][n2];arr[1][1]1;for(int i1;i<m;i){for(int j1;j<…

Oracle MOVE ONLINE 實現原理

Oracle MOVE ONLINE 實現原理 Oracle 的 MOVE ONLINE 操作是一種在線重組表的技術&#xff0c;允許在不中斷業務的情況下重新組織表數據。以下是其實現原理的詳細分析&#xff1a; 基本概念 MOVE ONLINE 是 Oracle 12c 引入的特性&#xff0c;用于替代傳統的 ALTER TABLE ..…