歐拉函數+素數篩

来源:http://www.cnblogs.com/llsq/archive/2016/08/26/5811067.html
-Advertisement-
Play Games

歐拉函數,就是歐拉發現的一個關於求素數的的公式,然後我們編個函數實現這個公式。 歐拉發現求小於等於n的正整數中有多少個數與n互質可以用這個公式: euler(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…(1-1/pn),其中p1,p2……pn為x的所有素因數,x是不為0 ...


歐拉函數,就是歐拉發現的一個關於求素數的的公式,然後我們編個函數實現這個公式。

歐拉發現求小於等於n的正整數中有多少個數與n互質可以用這個公式:

euler(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…(1-1/pn),其中p1,p2……pn為x的所有素因數,x是不為0的整數。euler(1)=1(唯一和1互質的數就是1本身)。 

歐拉公式的延伸:一個數的所有質因數之和是euler(n)*n/2。

其實直接看模板加註解想想就能看懂

篩選的原理就是找出n的因數,剔除含有n的因數的數,即剔除與n不互質的數

既然是求與n互質的個數,那我們可以直接篩選,看模板:

int phi(int n)

{    int res=n;                  /假設現有n個數與n互質,開始篩選剔除

 for(i=2;i*i<=n;i++)

{    if(n%i==0)                /若這個數是n的因數,減去n以下含有這個因數的數個數,假設n=8,小於等於8,2為公因數的有8/2=4個

   {   res-=res/i;

       while(n%i==0)            /將n不斷整除這個因數  

       n=n/i;

    }

}

if(n>1)             /若n大於1,則此時的n也是一個除1以外的因數

res-=res/n;            

return res;

}

有時候還用到多個數的歐拉值,因此需要對1到n的數都求出歐拉值,就是打表。

將1到n的歐拉值求出並存儲到數組,篩選法,代碼:

void phi(int n)                         上邊的看懂了,下邊這個求多個數的也類似

{   for(int i=1;i<=n;i++)

     p[i]=i;                   賦原值

  for(int i=2;i<=n;i++)

      if(p[i]==i)                

      {   for(int j=i;j<=n;j+=i)          篩選

           p[j]=p[j]-p[j]/i;

      }

}

 

素數篩:就是讓你判斷任意一個數是否為素數,若問一個求一個顯然會超時,所以首先需要把素數都求出來,用篩選法求的,所以叫素數篩。

原理就是若一個數有除1和它本身以外的因數就將它標記不是素數,最後無標記的就是素數。

直接看代碼加註解:

#include <iostream>

#include <cstring>

#define MAX 1000001

int flag[MAX];

int main()

{    memset(flag,0,sizeof(flag));

     flag[1]=1;               /1代表不是素數,0代表是素數

    for(int i=4;i<MAX;i+=2)

      flag[i]=1;              /先將偶數先標記不是

    for(int i=3;i*i<MAX;i+=2)  

    for(int j=i*i;j<MAX;j+=i)   /奇數的倍數標記不是

      flag[j]=1;

int n;                           

while(cin>>n)

{   if(flag[n]==0)

    cout<<"YES"<<endl;

    else

   cout<<"NO"<<endl;

}

}

 素數篩常用於讓你判斷大量素數,或求大量素數,當然如果數目很少,就按常規判斷就好了

 

待續……


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

-Advertisement-
Play Games
更多相關文章
  • 說明:Firemonkey 圖片按鈕(支持三種狀態:MouseOver, MouseDown, MouseUp,可各別指定圖片) 原碼下載:[示例]TestImageButton_圖片按鈕(3態).zip 運行展示: ...
  • 不多說,先上代碼,代碼的註釋寫的已經挺詳細的了 首先先瞭解了URL的一些常用的方法,現在我嘗試利用網址讀入內容到控制台列印輸出 很好奇會列印出什麼東西呢 下麵就是列印出來的東西 並不是想象中的會將我寫的博客列印出來,而是列印出了頁面的HTML佈局代碼 而教程中,使用Tomcat伺服器,URL地址指定 ...
  • 自定義模板引擎類 MyTpl.class.php 1 <?php 2 class MyTpl 3 { 4 private $tpl_vars = array(); 5 //分配 6 public function assign($key,$value){ 7 $this->tpl_vars[$key ...
  • 設計模式重點在於代碼風格的實現,使項目易於開發維護以及更新,同時,在底層代碼中存在著各種設計模式,使之易於拓展。總而言之,學會設計模式非常重要,在學習了《Head first 設計模式》之後,根據個人見解將裡面的知識與個人知識經驗結合提煉出來,方便以後自己回頭查閱複習,也同大家一起學習,如有不足,歡 ...
  • 首先如果TCP學過以後,再看UDP進行數據傳輸也是大同小異的,只是用到的類不同 UDP進行傳輸需要DataSocket和Datapacket類,Datapacket叫數據報,每一個數據報不能大於64k,都記錄著數據信息,發送端的IP、埠號, 以及要發送到的接收端的IP、埠號。 UDP進行傳輸是將 ...
  • 學Kotlin其實要看:http://kotlinlang.org/docs/kotlin docs.pdf 線上版是不完整的!!!少了一些章節,會有點難看懂後面的文檔。 我選擇了WordPress里的錯誤消息管理類wp error.php為對象,沒有依賴其他具體場景和類,所以比較適合移植和對比。 ...
  • ASA的美國總統競選 在這個大選之年,美國統計協會(ASA)將學生競賽和總統選舉放在一起,將學生預測誰是2016年總統大選的贏家準確的百分比作為比賽點。詳情見: http://thisisstatistics.org/electionprediction2016/ 獲取數據 互聯網上有很多公開的民調 ...
  • ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...