NO.19十六屆藍橋杯模擬賽第三期上

1

如果一個數 p 是個質數,同時又是整數 a 的約數,則 p 稱為 a 的一個質因數。
請問, 2024 的最大的質因數是多少?
答:23


#include <bits/stdc++.h>
using namespace std;int main() {ios::sync_with_stdio(false);cin.tie(nullptr);//定義一個整數變量n,并將其初始值設為2024int n = 2024;//定義一個整數類型的向量f,用于存儲n的質因數vector<int> f;//從2開始遍歷到sqrt(n),因為一個數的質因數不會超過它的平方根for (int i = 2; i * i <= n; i++) {//如果n能被i整除,說明i是n的一個質因數while (n % i == 0) {//將n除以i,繼續尋找n的其他質因數n /= i;//將找到的質因數i存入向量f中f.push_back(i);}}//如果經過上述步驟后,n仍然大于1,說明n本身是一個質數,將其存入向量f中if (n > 1) {f.push_back(n);}//對向量f進行升序排序sort(f.begin(), f.end());//將最大質因數輸出到標準輸出,并換行。cout << f.back() << '\n';//表示程序正常結束return 0;
}
  • #include <bits/stdc++.h>:這是一個非標準的頭文件,它包含了幾乎所有標準庫的頭文件,使用它可以避免分別包含多個頭文件。
  • using namespace std;:使用標準命名空間,這樣在代碼中就可以直接使用標準庫中的類和函數,而無需加上?std::?前綴。
  • ios::sync_with_stdio(false);:關閉 C++ 標準輸入輸出流與 C 標準輸入輸出流的同步,這樣可以提高輸入輸出的效率。
  • cin.tie(nullptr);:解除?cin?和?cout?的綁定,進一步提高輸入輸出的效率。
  • sort?是 C++ 標準庫提供的一個強大的排序工具,在默認情況下它會按照升序對指定范圍內的元素進行排序。
  • f.begin():這是向量?f?的起始迭代器,它指向向量的第一個元素。迭代器可以理解為一種特殊的指針,用于遍歷容器中的元素。
  • f.end():這是向量?f?的末尾迭代器,它指向向量最后一個元素的下一個位置。
質因數分解的基本原理

質因數分解是將一個合數表示為若干個質數相乘的形式。例如,對于數字?12,它可以分解為2×2×3,其中2和3都是質數。在進行質因數分解時,我們需要從最小的質數2開始,依次檢查每個數是否是原數的因數。如果是,則將其作為一個質因數記錄下來,并將原數除以這個質因數,得到一個新的數,然后繼續對新的數進行分解,直到新的數為1為止

2

對于兩個整數a, b,既是a的整數倍又是b的整數倍的數稱為a和b的公倍數。公倍數中最小的正整數稱為a和b的最小公倍數。
請問,2024和1024的最小公倍數是多少?
答:259072


#include <bits/stdc++.h>
using namespace std;int main() {ios::sync_with_stdio(false);cin.tie(nullptr);//定義兩個整數變量n和m,并分別初始化為2024和1024int n = 2024, m = 1024;cout << n / __gcd(n, m) * m << '\n';return 0;
}
  • __gcd(n, m):這是 GCC 編譯器提供的一個內置函數,用于計算?n?和?m?的最大公約數。在其他編譯器中,也可以使用?<numeric>?頭文件中的?std::gcd?函數來實現相同的功能。
  • n / __gcd(n, m) * m:根據最大公約數和最小公倍數的關系:
    L C M ( n , m ) = n × m G C D ( n , m ) LCM(n,m)=\frac{n \times m}{GCD(n,m)} LCM(n,m)=GCD(n,m)n×m?
    這里先將?n?除以?GCD(n, m),再乘以?m,可以避免在計算??時可能出現的整數溢出問題。
#include <iostream>
#include <numeric>int main() {int n = 2024, m = 1024;std::cout << n / std::gcd(n, m) * m << '\n';return 0;
}
gcd最大公約數和?lcm最小公倍數

最大公約數GCD
最大公約數指的是兩個或多個整數共有約數中最大的一個。

最小公倍數LCM
最小公倍數是指兩個或多個整數公有的倍數中最小的一個。

3

如果一個數 p 是個質數,同時又是整數 a 的約數,則 p 稱為 a 的一個質因數。
請問, 2024 的所有質因數的和是多少?
答:40


#include <bits/stdc++.h>
using namespace std;int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int n = 2024;vector<int> f;for (int i = 2; i * i <= n; i++) {while (n % i == 0) {n /= i;f.push_back(i);}}if (n > 1) {f.push_back(n);}sort(f.begin(), f.end());//定義一個整數變量sum,用于存儲質因數的和,初始值為0int sum = 0;//使用范圍for循環遍歷向量f中的每個元素for (auto x : f) {//將每個質因數累加到sum中sum += x;}cout << sum << '\n';return 0;
}
范圍for
for (declaration : range) {// 循環體
}
  • declaration:用于聲明一個變量,該變量將在每次循環迭代時依次綁定到?range?中的每個元素。
  • range:表示要遍歷的對象,可以是數組、容器、初始化列表等可迭代對象。
  • 循環體:每次迭代時執行的代碼塊。

4

請問,在不超過 2024 的數中,最大的質數是多少?
答:2017


#include <bits/stdc++.h>
using namespace std;int main() {ios::sync_with_stdio(false);cin.tie(nullptr);//遞減循環,從2024開始,每次循環將i的值減1,直到找到質數為止for (int i = 2024;; i--) {//布爾變量flg,初始值為true,用于標記當前的i是否為質數bool flg = true;//將i的值賦給臨時變量t,避免在后續的判斷過程中修改i的值int t = i;//從2開始遍歷到,因為一個數的因數不會超過它的平方根for (int j = 2; j * j <= t; j++) {//如果t能被j整除,說明t不是質數,將flg置為false,并使用break語句跳出內層循環if (t % j == 0) {flg = false;break;}}//如果flg仍然為true,說明i是質數,將其輸出到標準輸出,并使用break語句跳出外層循環,結束程序if (flg) {cout << i << '\n';break;}}return 0;
}

5

如果兩個整數 a, b 除了 1 以外,沒有其它的公約數,則稱整數 a 與 b 互質。
請問,與 2024 互質的數中(包括1),第 2024 小的數是多少?
答:4655


#include <bits/stdc++.h>
using namespace std;int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int n = 2024;//定義一個整數變量cnt,用于記錄與n互質的數的個數,初始值為0int cnt = 0;//這是一個無限循環,從1開始逐個檢查整數ifor (int i = 1;; i++) {//使用__gcd函數計算i和n的最大公約數,如果最大公約數為1,則說明i和n互質if (__gcd(i, n) == 1) {//如果i與n互質,則將計數器cnt加1if (++cnt == 2024) {//當cnt達到2024,找到了第2024個與n互質的數,將其輸出并使用break語句跳出循環cout << i << '\n';break;}}}return 0;
}

6

對于字符串 S=ANQNANBNQNANQNQNBNINQNQNANQNINANQNANBNQNANQNQNBNBNQNQNANQNINANQNANBNQNANQNQNBNINQNQNANQNINBNQNANBNQN ,請找到S的一個長度不超過10的子串 A,使得(A的長度)乘以(A在S中出現的次數)最大。
請問這個子串是什么?(如果有多個滿足條件的,請回答字典序最小的)。
答:NQN


#include <bits/stdc++.h>
using namespace std;int main() {ios::sync_with_stdio(false);cin.tie(nullptr);//定義一個字符串s,并初始化為給定的字符串string s = "ANQNANBNQNANQNQNBNINQNQNANQNINANQNANBNQNANQNQNBNBNQNQNANQNINANQNANBNQNANQNQNBNINQNQNANQNINBNQNANBNQN";//獲取字符串s的長度int n = s.size();//用于存儲最終結果的子串,初始為空string ans;//用于存儲最大的長度乘以出現次數的乘積,初始值為0int mx = 0;//外層循環枚舉子串的長度,從1到10for (int len = 1; len <= 10; len++) {//內層循環枚舉子串的起始位置,確保子串不會超出原字符串的范圍for (int i = 0; i + len - 1 < n; i++) {//使用substr函數提取從位置i開始、長度為len的子串string subs = s.substr(i, len);//用于記錄子串subs在原字符串中出現的次數,初始值為0int cnt = 0;//遍歷原字符串,檢查每個長度為len的子串是否與subs相等for (int j = 0; j + len - 1 < n; j++) {//如果相等,則將計數器cnt加1if (s.substr(j, len) == subs) {cnt += 1;}}//如果當前子串的長度乘以出現次數的乘積大于之前記錄的最大乘積,則更新最大乘積mx和結果子串ansif (len * cnt > mx) {mx = len * cnt;ans = subs;//如果乘積相等,但當前子串的字典序更小,則更新結果子串ans。} else if (len * cnt == mx && subs < ans) {ans = subs;}}}cout << ans << '\n';return 0;
}
for (int i = 0; i + len - 1 < n; i++)
  • 初始化int i = 0,定義一個整型變量?i?并將其初始值設為 0。i?表示子串在原字符串中的起始位置。
  • 循環條件i + len - 1 < n,這是決定循環是否繼續執行的條件。len?是當前正在考慮的子串的長度,n?是原字符串的長度。i + len - 1?表示子串的結束位置(因為數組下標從 0 開始)。這個條件確保子串不會超出原字符串的范圍。
  • 迭代語句i++,每次循環結束后,將?i?的值加 1,這樣就可以依次嘗試原字符串中不同位置作為子串的起始位置。

7

如果一個字符串中只包含字符0和字符1,則稱為一個01串(包含全為0的串和全為1的串)。
請問有多少個長度為24的01串,滿足任意5個連續的位置中不超過3個位置的值為1。


#include <bits/stdc++.h>
using namespace std;int main() {ios::sync_with_stdio(false);cin.tie(nullptr);//定義一個整數變量n,并將其初始值設為24int n = 24;//使用位運算'1 << 24'計算的值,并將其輸出到標準輸出,然后換行cout << (1 << 24) << '\n';//定義一個整數變量ans,用于記錄滿足條件的二進制序列的數量,初始值為0int ans = 0;//使用位運算'1 << n'計算2^n的值,該循環會遍歷從0到2^n-1的所有整數,每個整數可以看作一個長度為n的二進制序列for (int i = 0; i < 1 << n; i++) {//定義一個長度為2的數組cnt,用于統計0和1的個數,初始值都為0int cnt[2] {};//遍歷二進制序列的前5位for (int j = 0; j < 5; j++) { // 0 .. 4//使用位運算`i >> j & 1`提取二進制序列中第`j`位的值(0 或 1),并將對應的計數器加1cnt[i >> j & 1] += 1;}//如果前5位中1的個數超過3個,則跳過當前二進制序列,繼續檢查下一個序列if (cnt[1] > 3) {continue;}//定義一個布爾變量ok,用于標記當前二進制序列是否滿足條件,初始值為truebool ok = true;//從第5位開始,依次檢查后續連續5位中1的個數for (int j = 5; j < n; j++) {//移除當前連續5位中最左邊的一位,并將對應的計數器減1cnt[i >> (j - 5) & 1] -= 1;//添加當前連續5位中最右邊的一位,并將對應的計數器加1cnt[i >> j & 1] += 1;//如果當前連續5位中1的個數超過3個,則將ok設為false,并跳出循環if (cnt[1] > 3) {ok = false;break;}}//如果ok為false,說明當前序列不滿足條件,跳過該序列,繼續檢查下一個序列if (!ok) {continue;//如果ok為true,說明當前二進制序列滿足條件,將ans加1} else {ans += 1;}}cout << ans << '\n';return 0;
}

1 << 24
位運算就是直接對整數的二進制位進行操作。<<?是左移運算符,它會將一個數的二進制表示向左移動指定的位數。
數字?1?的二進制表示是?0000 0000 0000 0000 0000 0000 0000 0001
移動后的二進制結果是?0001 0000 0000 0000 0000 0000 0000 0000

i >> j?是 C++ 中的右移運算符表達式
右移運算符>>?是右移運算符,用于將一個整數的二進制表示向右移動指定的位數
對于表達式?i >> j,它會把整數?i?的二進制形式向右移動?j?位。

& 1?通常用于提取一個整數二進制表示的最低位(即最右邊的一位)。因為數字?1?的二進制表示在不同位數系統下,都是除了最低位為 1 其余位為 0
當一個整數與?1?進行按位與操作時,其他位都會因為和 0 進行按位與而變為 0,只有最低位會根據其自身的值(0 或 1)決定結果。如果最低位是 0,那么結果就是 0;如果最低位是 1,那么結果就是 1。

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

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

相關文章

Linux網絡_應用層自定義協議與序列化_守護進程

一.協議 協議是一種 "約定". socket api 的接口, 在讀寫數據時, 都是按 "字符串" 的方式來發送接 收的. 如果我們要傳輸一些 "結構化的數據" 怎么辦呢? 其實&#xff0c;協議就是雙方約定好的結構化的數據 像下面&#xff0c;兩端都知道數據結構…

SQL命令詳解之多表查詢(連接查詢)

目錄 1 簡介 2 內連接查詢 2.1 內連接語法 2.2 內連接練習 3 外連接查詢 3.1 外連接語法 3.2 外連接練習 4 總結 1 簡介 連接的本質就是把各個表中的記錄都取出來依次匹配的組合加入結果集并返回給用戶。我們把 t1 和 t2 兩個表連接起來的過程如下圖所示&#xff1a; …

001-碼云操作

碼云操作 一、配置公鑰1.官網地址1.進入 git bash2.查看生成的公鑰3.設置到 Gitee4.測試 二、初始化一個項目1.新建倉庫 一、配置公鑰 方便后續提交代碼不用填寫密碼 1.官網地址 官網地址&#xff1a;https://gitee.com/Git碼云教程&#xff1a;https://gitee.com/help/arti…

30.[前端開發-JavaScript基礎]Day07-數組Array-高階函數-日期Date-DOM

JavaScript的DOM操作 &#xff08;一&#xff09; 1 什么是DOM&#xff1f; 認識DOM和BOM 深入理解DOM 2 認識DOM Tree DOM Tree的理解 3 DOM的整體結構 DOM的學習順序 DOM的繼承關系圖 document對象 4 節點、元素導航 節點&#xff08;Node&#xff09;之間的導航&…

【自學筆記】Spring基礎知識點總覽-持續更新

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄 Spring 基礎知識點總覽1. Spring 框架簡介2. IoC&#xff08;控制反轉&#xff09;與 DI&#xff08;依賴注入&#xff09;2.1 IoC 容器2.2 依賴注入方式示例代碼&a…

WordPress多語言插件GTranslate

GTranslate是一個免費的WordPress多語言插件&#xff0c;它允許您將網站內容翻譯成多種語言。這個插件提供了一個簡單易用的界面&#xff0c;讓您可以在WordPress后臺直接進行翻譯操作。以下是GTranslate插件的一些主要特點&#xff1a; 免費使用&#xff1a;GTranslate插件完…

數列極限入門習題

數列極限入門習題 lim ? n → ∞ ( 1 1 2 1 3 ? 1 n ) 1 n \lim\limits_{n\rightarrow\infty}(1 \frac{1}{2}\frac{1}{3}\cdots\frac{1}{n})^{\frac{1}{n}} n→∞lim?(121?31??n1?)n1? lim ? n → ∞ ( 1 n 1 1 n 2 ? 1 n n ) \lim\limits_{n\rightarrow\…

嵌入式學習前要了解的基礎知識

一、電壓和電流 在嵌入式開發中&#xff0c;電壓和電流是兩個基本的電氣概念&#xff0c;對于理解和設計電子電路至關重要。它們直接影響到嵌入式系統的性能、功耗、可靠性和安全性。 電壓&#xff08;Voltage&#xff09; 電壓是電場力推動電荷移動的能力&#xff0c;通常以…

機器學習:強化學習的epsilon貪心算法

強化學習&#xff08;Reinforcement Learning, RL&#xff09;是一種機器學習方法&#xff0c;旨在通過與環境交互&#xff0c;使智能體&#xff08;Agent&#xff09;學習如何采取最優行動&#xff0c;以最大化某種累積獎勵。它與監督學習和無監督學習不同&#xff0c;強調試錯…

Spring學習筆記03——Spring Boot的文件結構

Spring boot常見的文件結構&#xff1a; src/ ├── main/ │ ├── java/ │ │ └── com.example.demo/ │ │ ├── DemoApplication.java # 主入口 │ │ ├── config/ # 配置類 │ │ ├── controller/ …

談談 HTTPS 的工作原理,SSL / TLS 握手流程是什么?

一、HTTPS 核心機制&#xff1a;非對稱加密 對稱加密 HTTPS HTTP over TLS/SSL&#xff0c;通過 ?混合加密體系? 解決三大問題&#xff1a; ?防竊聽? - 對稱加密傳輸內容&#xff08;如 AES&#xff09;?防篡改? - 數字簽名驗證數據完整性?防冒充? - 數字證書驗證服…

共軛梯度法筆記

一、梯度下降法 x k 1 x k ? α ? f ( x k ) x_{k1} x_k - \alpha \nabla f(x_k) xk1?xk??α?f(xk?) 這是普通的梯度下降公式&#xff0c;有兩個量是關鍵&#xff0c;步長 α \alpha α和方向 ? f ( x k ) \nabla f(x_k) ?f(xk?)。這里的方向直接選擇了梯度方向&…

ubuntu 啟動不起來,光標閃爍 解決方法

ubuntu 啟動不起來&#xff0c;光標閃爍 進不了系統&#xff0c;解決方法 按ctrl alt f2&#xff0c;進入終端&#xff0c;登錄。 jounal -b 查看啟動日志。 發現是找不到顯卡驅動程序。 解決方法&#xff1a; 卸載nvidia程序。 sudo systemctl stop gdm # 適用于GNOME…

CSS - 妙用Sass

官方文檔&#xff1a;https://www.sass.hk/docs/ 1.例1&#xff1a; each $theme in $themeList {$themeKey: map-get($theme, key);media screen and (weex-theme: $themeKey) {.btnText {max-width: 150px;include font(map-get($theme, medFont),map-get($theme, subFontS…

chromadb向量數據庫使用 (2)

目錄 代碼代碼解釋**1. 導入 chatGLM 嵌入函數****2. 創建 ChromaDB 客戶端和集合****3. 查詢集合中的數據數量****4. 添加數據到集合****5. 獲取已存儲的文檔****6. 更新文檔****7. 再次獲取數據&#xff0c;驗證更新結果****8. 刪除某個文檔****9. 獲取已刪除的文檔****總結*…

我的世界1.20.1forge模組開發進階物品(7)——具有動畫、3D立體效果的物品

基礎的物品大家都會做了對吧?包括武器的釋放技能,這次來點難度,讓物品的貼圖呈現動畫效果和扔出后顯示3D立體效果,這個3D立體效果需要先學習blockbench,學習如何制作貼圖。 Blockbench Blockbench是一個用于創建和編輯三維模型的免費軟件,特別適用于Minecraft模型的設計…

大模型在敗血癥預測及圍手術期管理中的應用研究報告

目錄 一、引言 1.1 研究背景與意義 1.2 研究目的與創新點 1.3 研究方法與數據來源 二、敗血癥概述 2.1 定義與流行病學 2.2 病因與發病機制 2.3 臨床表現與診斷標準 2.4 并發癥與危害 三、大模型技術原理及在醫療領域的應用 3.1 大模型技術概述 3.2 大模型在醫療領…

SpringBoot接口自動化測試實戰:從OpenAPI到壓力測試全解析

引言&#xff1a;接口測試的必要性 在微服務架構盛行的今天&#xff0c;SpringBoot項目的接口質量直接影響著系統穩定性。本文將分享如何通過自動化工具鏈實現接口的功能驗證與性能壓測&#xff0c;使用OpenAPI規范打通測試全流程&#xff0c;讓您的接口質量保障體系更加完備。…

微軟具身智能感知交互多面手!Magma:基于基礎模型的多模態AI智能體

作者&#xff1a; Jianwei Yang, Reuben Tan, Qianhui Wu, Ruijie Zheng, Baolin Peng, Yongyuan Liang, Yu Gu, MuCai, SeonghyeonYe, JoelJang, Yuquan Deng, Lars Liden, Jianfeng Gao 單位&#xff1a;微軟研究院&#xff0c;馬里蘭大學&#xff0c;威斯康星大學麥迪遜分校…

Linux中jdk-8u291-linux-x64 中jdk工具包

jdk-8u291-linux-x64 指的是適用于 64 位 Linux 系統的 Java 開發工具包&#xff08;JDK&#xff09;8 更新 291 版本。這是 JDK 的一個特定版本&#xff0c;用于開發 Java 應用程序和小程序。 jdk-8u291-linux-x64 網盤下載鏈接&#xff1a;夸克網盤分享