續-算法-數學知識

3、歐拉函數

1、定義:

1~n 中與 n 互質的數的個數

例如:6 的有 1 2 3 4 5 6 其中,與 n 互質 的 數的個數為 2個分別是:1、5

2、計算:

$ N = p_1^{a1} × p_2^{a2} × p_3^{a3} × … × p_k^{ak} $(例如:6 = 21 × 31

$ \phi(N) = N(1 - \frac{1}{p_1})(1 - \frac{1}{p_2}) …(1 - \frac{1}{p_k}) $

import java.util.*;public class Main {static int[] vs = new int[10010];public static void main(String[] args) {Scanner sc = new Scanner(System.in);int t = 1;while(t-- > 0) {int n = 6;int ans = n;for(int i = 2;i <= n / i;i++) {if(n % i == 0) {ans = ans / i * (i - 1);while(n % i == 0) n /= i;}}if(n > 1) ans = ans / n * (n-1);System.out.println(ans);}sc.close();}
}
import java.util.*;
public class Main{static int N = 1000010;static int index = 0;static int[] p = new int[N];static boolean[] st = new boolean[N];static int[] phi = new int[N];public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();phi[1] = 1;for(int i = 2;i <= n;i++) {if(!st[i]) {phi[i] = i - 1;p[index++] = i;}for(int j = 0;p[j] <= n / i;j++) {st[p[j] * i] = true;if(i % p[j] == 0) {phi[p[j] * i] = phi[i] * p[j];break;}phi[p[j] * i] = phi[i] * (p[j] - 1);}}long ans = 0;for(int i = 1;i <= n;i++) {ans += phi[i];}System.out.println(ans);sc.close();}
}
3、拓展

對于 1~m 中,與 n 互質的數的個數的 特殊情況

  • 如果 n 為質數:直接計算,結果為:$ m - [\frac{m}{n}](表示向向下取整,即為:(int)(m/n)) $
  • 如果 m 是 n 的倍數,即:$ m=k \cdot n ,結果為: ,結果為: ,結果為: k \cdot \phi(n) (其中\phi(n)是n的歐拉數) $
  • 如果 m 是 n 的次方倍,即:$ m = n^k ,結果為: ,結果為: ,結果為: m=n^{k-1} \cdot n ==> 結果為:n^{k-1} \phi(n) $

用處:如果 a 與 b 互質,那末有:$ \bbox[5px,border:2px solid greenyellow]
{
a^{\phi(b)} \equiv 1 \pmod{b} ===> a^{\phi(b)} - mod - b = 1
}
$

4、快速冪

1、原理

對于一個數 $ a^k 必定可以拆成 必定可以拆成 必定可以拆成 a^{x_1} * a^{x_2} * … * a^{x_k} , 因為: k 必定能轉化為二進制,而二進制的有 1 的一項,即為 x < s u b > k < / s u b > ,因此,可以計算每一項的 ,因為:k 必定能轉化為二進制,而二進制的有1的一項,即為x<sub>k</sub>,因此,可以計算每一項的 ,因為:k必定能轉化為二進制,而二進制的有1的一項,即為x<sub>k</sub>,因此,可以計算每一項的 a^x $進行計算。

因此要預處理計算出:$ a{20}、a{21}、a{22}…a{2k} , 之后,將 ,之后,將 ,之后,將 a^k $分解,計算。

import java.util.*;
public class Main{public static void main(String[] args) {Scanner sc = new Scanner(System.in);long n = 1;while(n-- > 0) {long a = 27; // 底數long k = 36; // 指數long p = (long) (1e9 + 7); // 取模System.out.println(qmi(a,k,p));}sc.close();}static long qmi(long a,long k,long p){long res = 1; // 初始值為 1while(k != 0) {// 如果 k(指數)的末尾為 1,那末直接計算// res = a^x_1 * .. * a^x_kif((k & 1) == 1) res = res * a % p;k >>= 1; // 指數向右移動一位a = a * a % p; // 持續計算預處理}return res; // 返回的就是 a^k % p 的結果}
}
2、費馬定理

$ b^{p-1} \equiv 1 \pmod{p} $ 條件:p 與 b 必須互質,也可也是,p 是質數

因此:由此可知,求 b 的模 p 的逆元,即為:$ b^{p-2} $即為 b 模 p 的逆元

public class Main {public static void main(String[] args) {// 求 n! 模 1e9 + 7 的逆元int n = 3;int mod = 1000000007;long ans = 1;for(int i = 1;i <= n;i++)ans = ans * qmi(i,mod - 2,mod) % mod;System.out.println(ans);}static long qmi(long a,long k,long p){long res = 1;while(k != 0) {if((k & 1) == 1)res = res * a % p;k >>= 1;a = a * a % p;}return res;}
}

5、組合數

1、快速計算 $ C_n^m $的值

1、條件:n <= 20000

2、原理:$ C_n^m = C_{n-1}^m + C_{n-1}^{m-1} $ 類似于動態規劃

public class Main {static int[][] c = new int[20010][20010];public static void main(String[] args) {long s = System.currentTimeMillis();int n = 20000;for(int i = 0;i < n;i++) {for(int j = 0;j <= i;j++) {if(j == 0) c[i][j] = 1;else c[i][j] = c[i-1][j] + c[i-1][j-1];}}System.out.println(c[6][2]);System.out.println(System.currentTimeMillis() - s);}
}

6、容斥原理

主要用于計算集合并集的個數,除去相交的個數。

容斥原理:$ S_1 ∪ S_2 ∪ S_3 = S_1 ∩ S_2 ∩ S_3 - (S_1 ∩ S_2) - (S_1 ∩ S_3) - (S_2 ∩ S_3) + (S_1 ∩ S_2 ∩ S_3) $

要求從 1~ n 中任意選擇任意個數,那末可以用位運算來遍歷這些所有的選擇。

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

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

相關文章

C/C++測試框架googletest使用示例

文章目錄 文檔編譯安裝示例參考文章 文檔 https://github.com/google/googletest https://google.github.io/googletest/ 編譯安裝 googletest是cmake項目&#xff0c;可以用cmake指令編譯 cmake -B build && cmake --build build將編譯產物lib和include 兩個文件夾…

LintCode第974題-求矩陣各節點的最短路徑(以0為標準)

描述 給定一個由0和1組成的矩陣&#xff0c;求每個單元格最近的0的距離。 兩個相鄰細胞之間的距離是1。 給定矩陣的元素數不超過10,000。 在給定的矩陣中至少有一個0。 單元格在四個方向上相鄰:上&#xff0c;下&#xff0c;左和右。 樣例 例1: 輸入: [[0,0,0],[0,0,0],[0…

Redis核心機制-緩存、分布式鎖

目錄 緩存 緩存更新策略 定期生成 實時生成 緩存問題 緩存預熱&#xff08;Cache preheating&#xff09; 緩存穿透&#xff08;Cache penetration&#xff09; 緩存雪崩&#xff08;Cache avalanche&#xff09; 緩存擊穿&#xff08;Cache breakdown&#xff09; 分…

CF每日5題(1300-1500)

最近急速補練藍橋杯中&#xff0c;疏于cf練習。 感覺自己過題還是太慢了。 今日水題&#xff0c;我水水水水。 1- 1979C lcm 水 1400 第 i i i局贏了&#xff0c;1個硬幣頂 k [ i ] k[i] k[i]個貢獻&#xff0c;所以每局分硬幣 x i 1 k [ i ] x_i{1\over k[i]} xi?k[i]1?個…

從代碼學習深度學習 - LSTM PyTorch版

文章目錄 前言一、數據加載與預處理1.1 代碼實現1.2 功能解析二、LSTM介紹2.1 LSTM原理2.2 模型定義代碼解析三、訓練與預測3.1 訓練邏輯代碼解析3.2 可視化工具功能解析功能結果總結前言 深度學習中的循環神經網絡(RNN)及其變種長短期記憶網絡(LSTM)在處理序列數據(如文…

easy-poi 一對多導出

1. 需求&#xff1a; 某一列上下兩行單元格A,B值一樣且這兩個單元格&#xff0c; 前面所有列對應單元格值一樣的話&#xff0c; 就對A,B 兩個單元格進行縱向合并單元格 1. 核心思路&#xff1a; 先對數據集的國家&#xff0c;省份&#xff0c;城市...... id 身份證進行排序…

AI比人腦更強,因為被植入思維模型【42】思維投影思維模型

giszz的理解&#xff1a;本質和外在。我們的行為舉止&#xff0c;都是我們的內心的表現。從外邊可以看內心&#xff0c;從內心可以判斷外在。曾國藩有&#xff17;個識人的方法&#xff0c;大部分的人在他的面前如同沒穿衣服一樣。對于我們自身的啟迪&#xff0c;我認為有四點&…

Spring Boot 打印日志

1.通過slf4j包中的logger對象打印日志 Spring Boot內置了日志框架slf4j&#xff0c;在程序中調用slf4j來輸出日志 通過創建logger對象打印日志&#xff0c;Logger 對象是屬于 org.slf4j 包下的不要導錯包。 2.日志級別 日志級別從高到低依次為: FATAL:致命信息&#xff0c;表…

【IOS webview】源代碼映射錯誤,頁面卡住不動

報錯場景 safari頁面報源代碼映射錯誤&#xff0c;頁面卡住不動。 機型&#xff1a;IOS13 技術棧&#xff1a;react 其他IOS也會報錯&#xff0c;但不影響頁面顯示。 debug webpack配置不要GENERATE_SOURCEMAP。 解決方法&#xff1a; GENERATE_SOURCEMAPfalse react-app…

ES中經緯度查詢geo_point

0. ES版本 6.x版本 1. 創建索引 PUT /location {"settings": {"number_of_shards": 1,"number_of_replicas": 0},"mappings": {"location": {"properties": {"id": {"type": "keywor…

OpenCV界面編程

《OpenCV計算機視覺開發實踐&#xff1a;基于Python&#xff08;人工智能技術叢書&#xff09;》(朱文偉&#xff0c;李建英)【摘要 書評 試讀】- 京東圖書 OpenCV的Python開發環境搭建(Windows)-CSDN博客 OpenCV也支持有限的界面編程&#xff0c;主要是針對窗口、控件和鼠標…

GOC L2 第五課模運算和周期二

課堂回顧&#xff1a; 求取余數的過程叫做模運算 每輪的動作都是重復的&#xff0c;我們稱這個過程位周期。 課堂學習&#xff1a; 剩余計算器 秋天到了&#xff0c;學校里的蘋果熟了&#xff0c;太乙老師&#xff0c;想讓哪吒幫忙設計一個計算器&#xff0c;看每個小朋友能分…

54.大學生心理健康管理系統(基于springboot項目)

目錄 1.系統的受眾說明 2.相關技術 2.1 B/S結構 2.2 MySQL數據庫 3.系統分析 3.1可行性分析 3.1.1時間可行性 3.1.2 經濟可行性 3.1.3 操作可行性 3.1.4 技術可行性 3.1.5 法律可行性 3.2系統流程分析 3.3系統功能需求分析 3.4 系統非功能需求分析 4.系統設計…

Redis 除了數據類型外的核心功能 的詳細說明,包含事務、流水線、發布/訂閱、Lua 腳本的完整代碼示例和表格總結

以下是 Redis 除了數據類型外的核心功能 的詳細說明&#xff0c;包含事務、流水線、發布/訂閱、Lua 腳本的完整代碼示例和表格總結&#xff1a; 1. Redis 事務&#xff08;Transactions&#xff09; 功能描述 事務通過 MULTI 和 EXEC 命令將一組命令打包執行&#xff0c;保證…

STM32F103C8T6單片機硬核原理篇:討論GPIO的基本原理篇章1——只討論我們的GPIO簡單輸入和輸出

目錄 前言 輸出時的GPIO控制部分 標準庫是如何操作寄存器完成GPIO驅動的初始化的&#xff1f; 問題1&#xff1a;如何掌握GPIO的編程細節——跟寄存器如何打交道 問題2&#xff1a;哪些寄存器&#xff0c;去哪里找呢&#xff1f; 問題三&#xff0c;寄存器的含義&#xff…

前端布局難題:父元素padding導致子元素無法全屏?3種解決方案

大家好&#xff0c;我是一諾。今天要跟大家分享一個我在實際項目中經常用到的CSS技巧——如何讓子元素突破父元素的padding限制&#xff0c;實現真正的全屏寬度效果。 為什么會有這個需求&#xff1f; 記得我剛入行的時候&#xff0c;接到一個需求&#xff1a;要在內容區插入…

當網頁受到DDOS網絡攻擊有哪些應對方法?

分布式拒絕服務攻擊也是人們較為熟悉的DDOS攻擊&#xff0c;這類攻擊會通過大量受控制的僵尸網絡向目標服務器發送請求&#xff0c;以此來消耗服務器中的資源&#xff0c;致使用戶無法正常訪問&#xff0c;當網頁受到分布式拒絕服務攻擊時都有哪些應對方法呢&#xff1f; 建立全…

LeNet-5簡介及matlab實現

文章目錄 一、LeNet-5網絡結構簡介二、LeNet-5每一層的實現原理2.1. 第一層 (C1) &#xff1a;卷積層&#xff08;Convolution Layer&#xff09;2.2. 第二層 (S2) &#xff1a;池化層&#xff08;Pooling Layer&#xff09;2.3. 第三層&#xff08;C3&#xff09;&#xff1a;…

【LLM】MCP(Python):實現 stdio 通信的Client與Server

本文將詳細介紹如何使用 Model Context Protocol (MCP) 在 Python 中實現基于 STDIO 通信的 Client 與 Server。MCP 是一個開放協議&#xff0c;它使 LLM 應用與外部數據源和工具之間的無縫集成成為可能。無論你是構建 AI 驅動的 IDE、改善 chat 交互&#xff0c;還是構建自定義…

Docker 安裝 Elasticsearch 教程

目錄 一、安裝 Elasticsearch 二、安裝 Kibana 三、安裝 IK 分詞器 四、Elasticsearch 常用配置 五、Elasticsearch 常用命令 一、安裝 Elasticsearch &#xff08;一&#xff09;創建 Docker 網絡 因為后續還需要部署 Kibana 容器&#xff0c;所以需要讓 Elasticsearch…