快速求出質數

要快速判斷一個數是否為質數,可以采用以下優化后的試除法,結合數學規律大幅減少計算量:

步驟說明

  1. 處理特殊情況

    • 若 ( n \leq 1 ),不是質數。
    • 若 ( n = 2 ) 或 ( n = 3 ),是質數。
    • 若 ( n ) 能被 2 或 3 整除,不是質數。
  2. 優化試除范圍

    • 所有質數(除 2 和 3)都可表示為 ( 6k \pm 1 ) 的形式。
    • 只需檢查 ( 5 ) 到 ( \sqrt{n} ) 之間的 ( 6k \pm 1 ) 的數。
  3. 循環檢查

    • 以 6 為步長,每次檢查 ( i ) 和 ( i+2 ) 是否能整除 ( n )。

C++ 代碼實現

#include <iostream>
#include <cmath>using namespace std;bool is_prime(int n) {if (n <= 1) return false;       // 小于等于1的數不是質數if (n <= 3) return true;        // 2和3是質數if (n % 2 == 0 || n % 3 == 0)  // 排除能被2或3整除的數return false;// 檢查形如6k±1的數,直到i超過sqrt(n)for (int i = 5; i * i <= n; i += 6) {if (n % i == 0 || n % (i + 2) == 0)return false;}return true;
}int main() {int num;cout << "輸入一個整數: ";cin >> num;if (is_prime(num))cout << num << " 是質數" << endl;elsecout << num << " 不是質數" << endl;return 0;
}

復雜度分析

  • 時間復雜度:( O(\sqrt{n}) ),但實際運行次數比普通試除法減少約 3 倍。
  • 空間復雜度:( O(1) ),僅需常數空間。

優化原理

  1. 減少除數范圍:通過數學推導,質數必定出現在 ( 6k \pm 1 ) 的序列中,避免檢查不必要的數。
  2. 提前終止條件:當 ( i^2 > n ) 時停止循環,確保只檢查到 ( \sqrt{n} )。
  3. 快速排除偶數:先處理 2 和 3 的倍數,直接跳過后續循環。

示例測試

  • 輸入:7 → 輸出:是質數
  • 輸入:25 → 輸出:不是質數(5×5)
  • 輸入:997 → 輸出:是質數(大質數)
  • 輸入:1000001 → 輸出:不是質數(101×9901)

這種方法結合數學規律和代碼優化,能高效處理大多數情況下的質數判斷需求。對于極大數(如加密用的大質數),可進一步使用概率性算法如 米勒-拉賓素性測試 進行更快速判斷。

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

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

相關文章

Linux上位機開發實戰(camera視頻讀取)

【 聲明&#xff1a;版權所有&#xff0c;歡迎轉載&#xff0c;請勿用于商業用途。 聯系信箱&#xff1a;feixiaoxing 163.com】 關于linux camera&#xff0c;一般都是認為是mipi camera&#xff0c;或者是usb camera。當然不管是哪一種&#xff0c;底層的邏輯都是v4l2&#x…

高性能緩存:使用 Redis 和本地內存緩存實戰示例

在現代高并發系統中&#xff0c;緩存技術是提升性能和降低數據庫壓力的關鍵手段。無論是分布式系統中的Redis緩存&#xff0c;還是本地高效的本地內存緩存&#xff0c;合理使用都能讓你的應用如虎添翼。今天&#xff0c;我們將基于go-dev-frame/sponge/pkg/cache庫的代碼示例&a…

Python實現deepseek接口的調用

簡介&#xff1a;DeepSeek 是一個強大的大語言模型&#xff0c;提供 API 接口供開發者調用。在 Python 中&#xff0c;可以使用 requests 或 httpx 庫向 DeepSeek API 發送請求&#xff0c;實現文本生成、代碼補全&#xff0c;知識問答等功能。本文將介紹如何在 Python 中調用 …

山東大學數據結構課程設計

題目&#xff1a;全國交通咨詢模擬系統 問題描述 處于不同目的的旅客對交通工具有不同的要求。例如&#xff0c;因公出差的旅客希望在旅途中的時間盡可能地短&#xff0c;出門旅游的旅客則期望旅費盡可能省&#xff0c;而老年旅客則要求中轉次數最少。編織一個全國城市間的交…

深入理解倒排索引原理:從 BitSet 到實際應用

倒排索引是一種極為重要的數據結構&#xff0c;它能夠高效地支持大規模數據的快速查詢&#xff0c;本文將深入探討倒排索引的原理&#xff0c;借助 BitSet 這種數據結構來理解其實現機制&#xff0c;并通過具體的JSF請求條件示例來展示其在實際應用中的運算過程。 BitSet&#…

Unity網絡開發快速回顧

知識點來源&#xff1a;總結人間自有韜哥在&#xff0c; 唐老獅&#xff0c;豆包 目錄 1.網絡通信-通信必備知識-IP地址和端口類2.網絡通信中序列化和反序列化2進制數據3.Socket類4.TCP同步服務端和客戶端基礎實現4.1.服務端基本實現4.2.客戶端實現&#xff1a; 5.區分消息類型…

內網滲透技術 Docker逃逸技術(提權)研究 CSMSF

目錄 如何通過上傳的webshell判斷當前環境是否是物理環境還是Docker環境 方法一&#xff1a;檢查文件系統 方法二&#xff1a;查看進程 方法三&#xff1a;檢查網絡配置 方法四&#xff1a;檢查環境變量 方法五&#xff1a;檢查掛載點 總結 2. 如果是Docker環境&#x…

動態規劃:從暴力遞歸到多維優化的算法進化論(C++實現)

動態規劃&#xff1a;從暴力遞歸到多維優化的算法進化論 一、動態規劃的本質突破 動態規劃&#xff08;Dynamic Programming&#xff09;不是簡單的遞歸優化&#xff0c;而是計算思維范式的革命性轉變。其核心價值在于通過狀態定義和決策過程形式化&#xff0c;將指數復雜度問…

數據結構與算法-數據結構-樹狀數組

概念 樹狀數組&#xff0c;也叫二叉索引樹&#xff08;Binary Indexed Tree&#xff0c;BIT&#xff09;&#xff0c;它是用數組來模擬樹形結構。樹狀數組的每個節點存儲的是數組中某一段的和&#xff08;或其他可合并的信息&#xff09;&#xff0c;通過巧妙的索引方式和樹形…

AI比人腦更強,因為被植入思維模型【19】三腦理論思維模型

定義 三腦理論思維模型是由美國神經科學家保羅麥克萊恩&#xff08;Paul MacLean&#xff09;提出的&#xff0c;該理論認為人類的大腦由三個不同但又相互關聯的部分組成&#xff0c;分別是爬蟲腦&#xff08;Reptilian Brain&#xff09;、邊緣腦&#xff08;Limbic Brain&am…

使用 patch-package 優雅地修改第三方依賴庫

在前端開發中&#xff0c;有時我們需要對第三方依賴庫進行修改以滿足項目需求。然而&#xff0c;直接修改 node_modules 中的文件并不是一個好方法&#xff0c;因為每次重新安裝依賴時這些修改都會丟失。patch-package 是一個優秀的工具&#xff0c;可以幫助我們優雅地管理這些…

馬科維茨均值—方差理論推導過程

下面給出一個詳細的、符號嚴謹、公式連貫的馬科維茨均值—方差理論推導過程&#xff0c;假設你輸入了 nnn 列股票的歷史收盤價數據。我們從數據符號的定義開始&#xff0c;逐步構建所有公式&#xff0c;并詳細解釋每個符號的意義。

僅靠prompt,Agent難以自救

Alexander的觀點很明確&#xff1a;未來 AI 智能體的發展方向還得是模型本身&#xff0c;而不是工作流&#xff08;Work Flow&#xff09;。還拿目前很火的 Manus 作為案例&#xff1a;他認為像 Manus 這樣基于「預先編排好的提示詞與工具路徑」構成的工作流智能體&#xff0c;…

【css酷炫效果】純CSS實現懸浮彈性按鈕

【css酷炫效果】純CSS實現懸浮彈性按鈕 緣創作背景html結構css樣式完整代碼效果圖 想直接拿走的老板&#xff0c;鏈接放在這里&#xff1a;https://download.csdn.net/download/u011561335/90492020 緣 創作隨緣&#xff0c;不定時更新。 創作背景 剛看到csdn出活動了&…

決策樹基礎

決策樹 定義 從根節點開始&#xff0c;也就是擁有全部的數據&#xff0c;找一個維度對根節點開始劃分&#xff0c; 劃分后希望數據整體的信息熵是最小的&#xff0c; 針對劃分出來的兩個節點&#xff0c;我們繼續重復剛才的劃分方式尋找信息熵最小的維度和閾值。 遞歸這個…

動態查找表

1.問題分析&#xff1a; 動態查找表是一種可以動態地插入、刪除和查找元素的數據結構。它是基于二叉搜索樹實現的&#xff0c;具有快速的查找和插入操作。 以下是一些關于動態查找表的問題分析&#xff1a; 1. 插入操作&#xff1a;在動態查找表中插入一個元素時&#xff0c…

得分匹配的朗之萬動力學——Score-Matching Langevin Dynamics (SMLD)

得分匹配的朗之萬動力學——Score-Matching Langevin Dynamics (SMLD) 文章目錄 得分匹配的朗之萬動力學——Score-Matching Langevin Dynamics (SMLD)摘要Abstract周報內容0. 上期補充1. 本期的基本思想2. 從一個分布中采樣&#xff08;Sampling from a Distribution&#xff…

字節DAPO算法:改進DeepSeek的GRPO算法-解鎖大規模LLM強化學習的新篇章(代碼實現)

DAPO算法&#xff1a;解鎖大規模LLM強化學習的新篇章 近年來&#xff0c;大規模語言模型&#xff08;LLM&#xff09;在推理任務上的表現令人矚目&#xff0c;尤其是在數學競賽&#xff08;如AIME&#xff09;和編程任務中&#xff0c;強化學習&#xff08;RL&#xff09;成為…

【Qt】QWidget的styleSheet屬性

&#x1f3e0;個人主頁&#xff1a;Yui_ &#x1f351;操作環境&#xff1a;Qt Creator &#x1f680;所屬專欄&#xff1a;Qt 文章目錄 前言1. styleSheet屬性2. 利用styleSheet屬性實現簡單的日夜模式切換2.1 知識補充-計算機中的顏色表示 3. 總結 前言 style?好像前端的st…

QT Quick(C++)跨平臺應用程序項目實戰教程 2 — 環境搭建和項目創建

目錄 引言 1. 安裝Qt開發環境 1.1 下載Qt安裝包 1.2 安裝Qt 1.3 安裝MSVC編譯器 2. 創建Qt Quick項目 2.1 創建新項目 2.2 項目結構 2.3 運行項目 3. 理解項目代碼 3.1 main.cpp文件 3.2 Main.qml文件 引言 在上一篇文章中&#xff0c;我們介紹了本教程的目標和結…