題意及題解:%%神仙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...