1. 程式人生 > >Min_25篩入門(踩爆洲閣篩?)

Min_25篩入門(踩爆洲閣篩?)

好像是一種比較新的篩法,網上資料都是18年的
趕上時代潮流了??
據說踩爆了一種叫洲閣篩的篩法?

用途

篩一些比較神奇的函式F字首和。(或者詢問區間內什麼的)
要能構造一個G,使得G(p)=F(p),pPrime,並且G要是“完全積性”的。

複雜度

空間n^0.5,時間據說為n0.75/logn(被集訓隊大佬fake掉了我也不知道)
2s大概可以做兩次1e10吧。

Part1(篩法遞推)

下文中,記R(a)表示a的最小質因子。
一個數x要麼是質數,要麼R(x)<=x

首先,我們來求出所有質數的F和。


g(i,j)表示

F(x),滿x[2,i]xPrimeR(x)>Pj
Pj表示第j個質數。(即篩法進行到Pj時的狀態)

其中j的取值只有n個,按j分層,我們要求的是篩法進行完畢的狀態g(i,MAX)
初始狀態g[i,0]我們將所有數都視作質數來預處理,然後一個個質數去篩,將合數篩去,這樣剩下的就是質數的F和。

容易推出g的遞推式,用g(i,j1)來推g(i,j),即減去所有最小質因子為Pj的數的F和。

g(i,j)=g(i,j1)F(Pj)(g(i/Pj,j1)sumf(j1))
後面括號內sumf(j)是指F(Pi),i[1,j]

晒微解釋一下式子的含義:
考慮任意一個需要被篩出的數PjA<=i,即A<=i/Pj
注意需要同時滿足R(A)>=Pj
這樣的數的F和其實可以用g表示出來。但同時注意到g內有一段小於Pj的質數,需要減去。
*注意此處i/Pj可能小於Pj,此時式子不正確。但當

Pj2>i時顯然

g(i,j)=g(i,j1),實現上由於省略了第二維,因此直接不更新即可。

根據常識,第一維大小隻有2n,離散下來存好。具體可能需要看標。
下面在篩質數和。

int getid(ll x) {
    if (x <= P) return id[x]; else return id2[n/x];
}
    //p是質數陣列,pre[x]表示p[2]+p[3]...+p[x]
    P = sqrt(n);
    for (ll l = 1; l <= n;) {
        ll v = n / l, r = n / v;
        if (v <= P) id[v] = ++m; else id2[n/v] = ++m;
        w[m] = v;
        g[m] = (2+v)*(v-1)/2;
        l = r + 1;
    }
    //注意w是遞減的。
    for (int j = 1; p[j] <= P; j++) {
        for (int i = 1; i <= m; i++) {
            if (p[j] * p[j] > w[i]) break; 
            g[i] -= p[j] * (g[getid(w[i] / p[j])] - pre[j-1]);
        }
    }

Part2(答案統計)

求好了所有質數的和,就可以考慮如何求真·字首和了。
有直接計算 / 遞推兩個方法。優缺點在最後。

直接計算版

類似g的定義,
f(i,j)表示

F(x),滿x[2,i]R(x)>=Pj
(注意是R(x)大於等於Pj而不是大於Pj)
分兩個部分來計算:
1.質數
2.合數,通過列舉其最小質因子與次冪來統計。

對於f(i,j),顯然質數部分就是

相關推薦

Min_25入門

好像是一種比較新的篩法,網上資料都是18年的 趕上時代潮流了?? 據說踩爆了一種叫洲閣篩的篩法? 用途 篩一些比較神奇的函式F字首和。(或者詢問區間內什麼的) 要能構造一個GG,使得G(p)=F(p),p∈PrimeG(p)=F(p),p∈Prim

杜教進階+講解+SPOJ divcnt3

前綴 con bre sca else rac poj class algo Part 1:杜教篩進階在了解了杜教篩基本應用,如$\sum_{i=1}^n\varphi(i)$的求法後,我們看一些杜教篩較難的應用。求$\sum_{i=1}^n\varphi(i)*i$考慮把

定義非完全積性函式F(x) 我們現在要做的事情是求: ∑x=1nF(x) 還要滿足的是:F(pc)是與p相關的低階多項式 考慮將每個x的質因數分成小於等於n√和大於n√兩部分: ∑x=1nF(x)=∑1≤i≤ni沒有大於n√的質因數F(i)⎛⎝⎜⎜⎜1

11.python並發入門part6 Semaphore信號量

semaphore python 信號量 一、什麽是信號量。信號量也是一種鎖。信號量的主要用途是用來控制線程的並發量的,BoundedSemaphore或Semaphore管理一個內置的計數器,每調用一次acquire()方法時,計數器-1,每調用一次release()方法時,內部計數器+1。不過

11.python並發入門part7 線程隊列

python 線程 隊列 queue 一、為什麽要用隊列?隊列是一種數據結構,數據結構是一種存放數據的容器,和列表,元祖,字典一樣,這些都屬於數據結構。隊列可以做的事情,列表都可以做,但是為什麽我們還要去使用隊列呢?這是因為在多線程的情況下,列表是一種不安全的數據結構。為什麽不安全?可以看下面

python3爬蟲入門urllib和requests簡單使用

知道python有強大的的爬蟲庫,但是對於我們普通小白來說,寫一個完整的爬蟲需要知道什麼甚至瞭解什麼都是很重要的。掌握了這些基本點,才能夠熟悉爬蟲的構成和獲取有用的資訊。 編寫一個小爬蟲個人感覺可以分為三個階段: 1:請求,這個就是使用urlib2或者requests

Mybatis學習記錄-----Mybatis入門基本增刪改查方法

方便回顧和加強記憶,記錄一下mybatis的使用方法。mybatis的官網文件:http://www.mybatis.org/mybatis-3/zh/getting-started.html。 Mybatis框架 目錄 1、建立資

數論_埃氏求區間內多少素數

埃拉託斯特尼(公元前276—公元前194) 埃拉託斯特尼是古希臘著名的數學家、地理學家、天文學家。他先在亞歷山大港學習,後又轉至雅典。公元前236年,托勒密三世指定他為亞歷山大圖書館的圖書管理員和館長。他跟阿基米德是好朋友。埃拉託斯特尼的主要貢獻包括: 埃拉託斯特尼篩法:尋找素數的方法。 地理常數測量:

Redis入門下載、安裝、執行兩個系統Linux、window

Redis入門(下載、安裝)(Linux、window) 一、Redis介紹 Redis是NoSql的一種。 1、什麼是NoSql NoSql,全名:Not Only Sql,是一種非關係型資料庫,它不能替代關係弄資料庫,只是關係型資料庫的一個補充,是可以解決高

狀態壓縮入門附經典題目和題解

#include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<algorithm> using namespace std; int n,m,ans; c

Linux程式設計:一、入門建立自己的靜態庫

專案檔案最終的樹目錄,生成目標程式後,可以刪除中間檔案   note:靜態庫以lib開頭 ,比如mylib.a 靜態庫缺點:很多程式使用一個函式庫的函式時,會產生很多個副本。 共享庫.so可以解決此問題。 建立自己的函式,放在不同的標頭檔案中,只定義不宣告,並用gcc編譯 /

js之DOM入門慕課網學習筆記

DOM簡介 獲得元素 document.getElementById(’’) 1、通過id獲得元素內容 document.getElementsByTagName(’’) 2、通過標籤獲得元素內容 document.getElementsByClassName(’’) 3、通過

動態規劃入門-差不多一半借鑑左神

其實從嚴格意義上說,動態規劃,並不是一種演算法,而是一種程式設計技巧,除去無關運算,降低時間複雜度。 舉個例子: 經典例子1-階乘: 遞迴實現:fac(x)=x*fac(x-1),臨界條件為x==0時,返回1。 以x==4時,解空間樹: 遞迴時由上往下延展,解問題時從

MATLAB 7.0 學習入門 -- 練習三 多項式求根

     Matlab中使用行向量表示多項式。比如  可以表示為 行矩陣 A = [ 12, 0.21, 11.897, 3.77 ]。即按照x的降冪來表示。從x的n次冪到0次冪(常數項)。     為了求根,我們在Matlab 7.0中輸入x的冪的行向量,然後通過root

SQL 新人入門 從基礎框架走起

SQL 新人入門 (從基礎框架走起)SQL語句最基礎框架 select 欄位 from 表名 以下語句皆在該基礎上加內容,假設表名為table ①如果想搜尋表內所有內容 select * from table ②搜尋多個欄位 se

MyBatis入門項目演示基於Maven

創建 映射 項目結構 bubuko 實體類 目錄結構 圖形化 連接 fig MyBatis的運行流程:SqlSessionFactory回話工廠通過Resource獲取SqlMapConfig.xml的配置文件信息,然後通過sqlSession來跟數據庫進行交互。SqlSe

Python快速入門PyCharm 2017 免費下載安裝

關於Python的介紹這裡就不多說了。工欲善其事,必先利其器。這裡介紹一個Python編寫的軟體 PyCharm.PyCharm是一種Python IDE,帶有一整套可以幫助使用者在使用Python語言

Hibernate入門附原始碼,jar包

1. 安裝eclipse hibernate 外掛 http://download.jboss.org/jbosstools/updates/stable/ 選擇   JBoss Application Development    的     Hibernate T

實現童年夢想——RPG遊戲入門RPG製作大師使用教程

先下載一個RPG製作大師。下載地址:點選開啟連結 開啟RPG Maker,新建工程,會出現一張地圖,現在正式設計自己的遊戲。 1.背景地圖裝飾設定: 在左下方MAP001上單擊右鍵,彈出地圖設定、新建地圖等選單,在地圖設定裡我們有許多背景地圖可選(草原、森林、海邊、沙漠

AJAX入門被封裝過的AJAX

JQuery對 AJAX一步操作進行了封裝,常用的方法有以下幾種: (1)、$.ajax()          $.ajax是jQuery對AJAX進行封裝的基礎,通過使用這個函式可以完成非同步通訊的所有功能,但是它的函式較多,以下為常用的幾個 var configObj