素數篩法(Eratosthenes篩法)

来源:https://www.cnblogs.com/KeepZ/archive/2019/08/12/11343202.html
-Advertisement-
Play Games

介紹 Eratosthenes篩法,又名埃氏篩法,對於求1~n區間內的素數,時間複雜度為n log n,對於10^6^ 以內的數比較合適,再超出此範圍的就不建議用該方法了。 篩法的思想特別簡單: 對於不超過n的每個非負整數p, 刪除2p, 3p, 4p,…, 當處理完所有數之後, 還沒有被刪除的就是 ...


介紹

Eratosthenes篩法,又名埃氏篩法,對於求1~n區間內的素數,時間複雜度為n log n,對於10^6^ 以內的數比較合適,再超出此範圍的就不建議用該方法了。
篩法的思想特別簡單: 對於不超過n的每個非負整數p, 刪除2p, 3p, 4p,…, 當處理完所有數之後, 還沒有被刪除的就是素數。

代碼

void init()
{
    int cnt=0;
    for(int i=0;i <= Max;i++)
        is_prime[i] = true;
    is_prime[0]=is_prime[1]=false;
    for(int i=2;i<=Max;i++)
        if(is_prime[i])
        {
            prime[cnt++]=i;     //邊篩邊記錄素數
            for(int j=2*i;j<=Max;j+=i)
                is_prime[j]=false;
        }
}

對應題目:Prime Gap UVA - 1644
對應題目代碼:

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int n;
const int maxn = 100001, Max = 1299721;
int prime[maxn];
bool is_prime[Max+1];
void init()
{
    int cnt=0;
    for(int i=0;i <= Max;i++)
        is_prime[i] = true;
    is_prime[0]=is_prime[1]=false;
    for(int i=2;i<=Max;i++)
        if(is_prime[i])
        {
            prime[cnt++]=i;     //邊篩邊記錄素數
            for(int j=2*i;j<=Max;j+=i)
                is_prime[j]=false;
        }
}
int main()
{
    std::ios::sync_with_stdio(false);
    //freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);
    init();
    while(cin >> n && n)
    {
        if(is_prime[n])     
        {
            cout << 0 << endl;
            continue;
        }
        for(LL i = 0; i < maxn; i++)
        {
            if(prime[i] > n)
            {
                if(prime[i] != n)
                    cout <<  prime[i] - prime[i-1] << endl;
                break;
            }
        }
    }

}

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Windows下Beyond Compare 4 30天評估到期了的話,可以嘗試下麵兩種方式: 破解方式把Beyond Compare 4安裝文件夾下麵的BCUnrar.dll文件刪掉就行了,但是這種依然會提示在試用期 BC4註冊碼:可以用下麵這個註冊碼,有效期是到2019年12月 BEGIN LI ...
  • 使用dir()我們可以知道這個數據類型的內置函數有什麼方法: 1.迭代器 iterable:可迭代的 迭代就是將數據能夠一個一個按順序取出來 上面數據類型返回為真說明它是可以迭代的,反之是不可迭代的 可迭代協議: 就是內部要有一個__iter__()來滿足要求 當一個具有可迭代的數據執行__iter ...
  • 通過DefaultMQPullConsumer作為預設實現,這裡的啟動過程和Producer很相似,但相比複雜一些 【RocketMQ中Producer的啟動源碼分析】 DefaultMQPullConsumer的構造方法: 這裡會封裝一個DefaultMQPullConsumerImpl,類似於P ...
  • 1.爬取豆瓣top250書籍 結果 2.把評分為9.0的書籍保存到book_out.csv文件中 ...
  • 零基礎學python,python視頻教程 這是我收集到的互聯網上的視頻資源,所有內容均來自互聯網。僅供學習使用。 目前我在也在學習過程中,會把學習過程中遇到問題以及解決問題的方式,總結到我的公眾號【趣學程式】裡面。 偶爾會發表幾篇文章,供給大家學習使用。茫茫人海之中,只為交個朋友。還請多多多指教小 ...
  • 最近整理ssm,寫完demo案例,無論如何都訪問不了後臺,百度了好多,終於解決了問題所在 先看頁面信息: 因為一直報404錯誤,一直找路徑是不是弄錯了,或配置文件弄錯了,僅僅這個配置文件都看了無數遍,然而並沒有發現問題,後來百度這個描述才發現了問題The origin server did not ...
  • 這是一篇修改class文件的文章。註釋並不完全,要抓住這次練習的目的: boolean在虛擬機中是以何種方式解讀的 好的,開始我的表演 1.安裝asmtools.jar(本文尾部有步驟) 2.編寫一個java文件,並編譯,執行 2.1 Foo.java 1 public class Foo { 2 ...
  • 本文將通過for ... in ...的語法結構,遍歷字元串、列表、元組、字典等數據結構。 字元串遍歷 列表遍歷 元組遍歷 字典遍歷 1. 遍歷字典的key(鍵) 2. 遍歷字典的value(值) 3. 遍歷字典的項(元素) 重點:帶下標索引的遍歷 正常情況我們是這樣的 升級版使用 enumerat ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...