[min25篩學習小記]LOJ6053
min25篩
解決一類積性函式求字首和問題,主旨為模擬普通篩法過程。
假設我們要求。
一般來說,能做的題,F(p)可表示為p相關的多項式,其中p為質數,下面將以為例。
也即統計
為了方便做,我們先做出所有質數的f和。怎麼做呢?
設。
其中表示從小到大第i個質數。g的含義就是,你用帶log的篩法去做,現在暫時排除掉前i個質數的倍數的f和。
和原始篩法一樣,注意到,n以內的合數,必定存在
轉移:
.
而如果,後面部分可以略去。
其中sum[i]表示的是前i個質數的F和,這個可以預處理。
這個式子的含義是,在前i-1個質數篩去合數結果的基礎上,再用篩,你把要篩的數除去,顯然剩下不能有小於的質因子。g狀態比較多,用遞推會比較快。
再考慮怎麼把所有的數都算上。
設
和g相反,我們要從大的i推到小的i。
質數部分,由g求出來。對於合數,列舉每個數的最小質因子及其次冪來轉移:
mx為能取到的最大的質數。
然後玄學地,S直接轉移不用記憶化,跑得非常快,1s可以過1e10的n;而g則需要遞推來寫,而不是雜湊,才能過1e10。
LOJ6053
考慮直接套公式即可。
程式碼
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<map>
#include<set>
using namespace std;
typedef long long ll;
typedef double db;
#define fo(i,j,k) for(i=j;i<=k;i++)
#define fd(i,j,k) for(i=j;i>=k;i--)
#define cmax(a,b) (a=(a>b)?a:b)
#define cmin(a,b) (a=(a<b)?a:b)
const int N=2e5+5,M=1e6+5,mo=1e9+7;
ll pd[M],pri[M],spr[M],sprf[M];
ll val[N],g0[N],g1[N],id[2][N],pt,sn,n,nn,tt,i,j,v,upb,kan;
void predo(ll n)
{
ll i,j,t;
fo(i,2,n)
{
if (!pd[i])
pri[++pri[0]]=i;
fo(j,1,pri[0])
{
if (1ll*i*pri[j]>n) break;
t=i*pri[j];
pd[t]=1;
if (i%pri[j]==0) break;
}
}
fo(i,1,pri[0]) spr[i]=(spr[i-1]+pri[i])%mo;
fo(i,1,pri[0]) sprf[i]=(sprf[i-1]+pri[i]+((i==1)?1:-1))%mo;
}
void sieve_g()
{
sn=trunc(sqrt(n));
tt=0;
i=1;
while (i<=n)
{
v=n/i;
j=n/v;
g0[++tt]=(v-1)%mo;
g1[tt]=(v%mo*(v%mo+1ll)/2ll-1ll)%mo;
val[tt]=v;
if (v<=sn) id[0][v]=tt;else id[1][i]=tt;
i=j+1;
}
fo(upb,1,pri[0]) if (!(n/pri[upb]/pri[upb])) break;
upb--;
fo(j,1,upb)
{
while (tt&&!(val[tt]/pri[j]/pri[j])) tt--;
fo(i,1,tt)
{
pt=val[i]/pri[j];
if (pt<=sn) pt=id[0][pt];else pt=id[1][n/pt];
g0[i]=(g0[i]-g0[pt]+(j-1))%mo;
g1[i]=(g1[i]-(g1[pt]-spr[j-1])*pri[j])%mo;
}
}
}
ll S(ll n,ll x)
{
if (n<pri[x]||n<=1) return 0;
if (n<=sn) pt=id[0][n];else pt=id[1][nn/n];
ll ret=(g1[pt]-g0[pt]+2-sprf[x-1])%mo,prod;
ll i,k;
fo(i,x,pri[
相關推薦
[min25篩學習小記]LOJ6053
min25篩
解決一類積性函式求字首和問題,主旨為模擬普通篩法過程。
假設我們要求∑i=1..nF(i)∑i=1..nF(i)。
一般來說,能做的題,F(p)可表示為p相關的多項式,其中p為質數,下面將以F(p)=pkF(p)=pk為例。
也即統計∑ii
min_25篩 學習小記
終於在9102年之前搞完了這個東西。。
關於min_25篩,一種常數和寫法優於洲閣篩的神奇篩法,複雜度大概是
O
(
min_25篩學習小記
終於在考試中碰到了一題不能用杜教篩的函式,被迫來學這個。。。
概述
首先這個函式f(x)f(x)要求是積性函式,而且f(p)f(p)和f(pc)f(pc)都要很好計算,設一個“假的”f′(x)f′(x)表示把xx直接當成質數時的f(x)f(x),f′
「學習筆記」Min25篩
前言
M
i
n
25
yarn 學習 小記
webp 清除 style conf comm project yarn info lin 官網:https://yarnpkg.com/zh-Hans/docs/installing-dependencies
簡介:包管理工具,和npm類似主要特點:快速、安全、可靠 快
selenium學習小記
statement from 都沒有 mat load 發現 runtest 打開 stat selenium用於頁面自動化測試,其簡介雲雲這裏不再粘來粘去的贅述,浪費時間。下面說說自己遇到的一點小問題,及其處理方法。
一:selenium安裝
安裝方法,百度一下,相比
學習小記:JS判斷時特殊值與boolean類型的轉換
ring something mbo true mage js框架 temp some .info 扒開JQuery以及其他一些JS框架源碼,常常能看到下面這樣的判斷,
寫慣了C#高級語言語法的我,一直以來沒能系統的理解透這段代碼。
var test;
//do
Python學習小記
hang class 字典 code col shang alice hone sha 字典:
1.
1 people = {
2 ‘Alice‘:{
3 ‘phone‘: ‘111‘,
4 ‘addr‘: ‘shangha
二維最小乘積生成樹學習小記
轉化 div 求解 idt pla 學習 right log inf Preface
對於形如給定一些邊,其邊權為xi和yi,構造一個生成樹,使得
我們稱這棵樹,為最小乘積生成樹。我們可以考慮,沿用最小生成樹的思想,把這種新穎的最小生成樹做對。
Conte
枚舉enum學習小記
AI 兩個 有關 pri AC 聲明變量 文件 參數 lis 參考文獻:
[1]C++程序設計語言(特別版), 裘宗燕譯, 機械工業出版社
[2]C++ Primer (3rd Ed.), S.B. Lippman and J. Lajoie, 人民郵電出版社
1、枚舉
【2018/04/02】學習小記
webp style pac error 進度條 成功 .config lB lba 復習了webpack的一些基礎~
--progress 帶進度條
--watch 使用緩存
--colors 醒目標記
node_modules本地最好自己有一份(~ ̄(OO) ̄)ブ,要不
胡小兔的杜教篩學習筆記
求解 init 了解 define esp spa warning 它的 prime 好久沒寫數論題,今天在51nod抓了一道,發現自己早就把杜教篩忘得一幹二凈啦~ 所以今天我把杜教篩學習筆記整理一下,防止以後再次忘記 =v=
[Warning] 杜教篩復雜度證明我暫時還不
無監督學習小記(參考)
廣泛 個數 就是 sca 協方差矩陣 ear 元素 約束 方法 下面淩亂的小記一下無監督學習
無監督學習->聚類 降維
聚類:數據相似性
相似性的評估:兩個數據樣本間的距離
距離:歐氏距離 曼哈頓距離 馬氏距離 夾角余弦
sklearn 聚類算法 sklearn.cl
java集合類學習小記
lse 實例 hash 如果 集合 常用 遍歷 保存 bject 【List接口】:可變數組,允許保存所有類型元素,包括null,元素可重復,按添加順序保存【常用實現類】:建議用ArrayListArrayList:索引訪問速度快(但插入和刪除節點較慢)LinkedList
啟發式合並(堆、set、splay、treap)/線段樹合並學習小記
排序 需要 操作數 所有 class 兩個 因此 ext pan 啟發式合並
剛聽到這個東西的時候,我是相當蒙圈的。特別是“啟發式”這三個字莫名的裝逼,因此之前一直沒有學。
實際上,這個東西就是一個SB貪心。
以堆為例,若我們要合並兩個堆a、b,我們有一種極其簡單的做法:
BTM學習小記
color lda col src ram pen 估計 param sel BTM的原理跟LDA很像,下面是該模型的概率圖:
由該圖可以看出來,與LDA的區別在於確定主題分布和詞分布後相應地取兩個詞(而LDA只取一個,即類比常見的骰子說法:先投擲K面的骰子得到主題z,再
es學習小記
在學習es的過程中留下腳印方便之後複習
學習地址http://lib.csdn.net/wojiushiwo987/structure/deep_elasticsearch/node/17523615
十大恨招:https://blog.csdn.net/laoyang360/article
Python學習小記(1)
1.import問題
λ tree /F
卷 Programs 的資料夾 PATH 列表
卷序列號為 BC56-3256
D:.
│ fibo.py
│
├─fibo
│ │ __init__.py
│ │
│ └─__pycache__
│ __init__.cpytho
Python學習小記(2)---[list, iterator, and, or, zip, dict.keys]
1.List行為
可以用 alist[:] 相當於 alist.copy() ,可以建立一個 alist 的 shallo copy,但是直接對 alist[:] 操作卻會直接操作 alist 物件
Python學習小記(3)---scope&namespace
def strong pam ner fine 影響 global 可見 Matter
首先,函數裏面是可以訪問外部變量的
#scope.py
def scope_test():
spam = ‘scope_test spam‘
d