求和 Dirichlet 字首和

2022-03-24 18:43:54 字數 817 閱讀 2448

題意及題解:%%神仙gyz,nb就完了

然後,大佬好像沒給**,蒟蒻給乙份。

upd: 之前那個碼跑得太慢了,而且記憶體好像超限了...

#include #include #include #include using namespace std;

const int maxn = 5e7 + 10;

inline int read()

while (c >= '0' && c <= '9') s = s * 10 + c - '0', c = getchar();

return s * w;

}int n, p;

int prime[maxn / 10], tot, cnt[maxn], d[maxn];

bool vis[maxn];

void pre()

for (register int j = 1; j <= tot && i * prime[j] <= n; j++)

d[i * prime[j]] = 1;

cnt[i * prime[j]] = cnt[i] * 2;

} }

}int main()

}long long ans = 0, sum = 0;

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

printf("%lld\n", ans);

return 0;

}

附一些乾貨:

線性求約數個數、約數和:

dirichlet 字首和:

Dirichlet 字首和的幾種版本

求 b i sum a d n le 2 times 10 看 for int i 1 i en pri i n i 為啥這麼做它是對的呢?發現每個數字會被它除以所有質因子轉移到,並且是按照質因子從小到大來的。所以這個 相當於,對所有質因子遞迴求,然後對對所有質因子搞字首和。形式和 埃篩 一樣,複雜...

K 求和VII lca 字首和)

題目描述 master對樹上的求和非常感興趣。他生成了一棵有根樹,並且希望多次詢問這棵樹上一段路徑上所有節點深度的k次方和,而且每次的k可能是不同的。此處節點深度的定義是這個節點到根的路徑上的邊數。他把這個問題交給了pupil,但pupil並不會這麼複雜的操作,你能幫他解決嗎?輸入第一行包含乙個正整...

1081 子段求和(字首和)

給出乙個長度為n的陣列,進行q次查詢,查詢從第i個元素開始長度為l的子段所有元素之和。例如,1 3 7 9 1,查詢第2個元素開始長度為3的子段和,1 1。3 7 9 19,輸出19。輸入第1行 乙個數n,n為陣列的長度 2 n 50000 第2 至 n 1行 陣列的n個元素。10 9 n i 10...