题目大意:给定一个长度为$n$的序列$a_n$,需要求出一个序列$b_n$,满足:
$$
b_k=\sum\limits_{i|k}a_i
$$
$n\leqslant10^7$

题解:$\mathrm{Dirichlet}$前缀和,考虑把$k$写成一个无穷向量$[\beta_1,\beta_2,\beta_3,\cdots]$,满足$k=\sum\limits_iP_i^{\beta_i}$,$P_i$为第$i$个质数。相同的,把$i$写成$[\alpha_1,\alpha_2,\alpha_3,\cdots]$,于是:

$$
\begin{align*}
b_{\beta_{k,1},\beta_{k,2},\beta_{k,2},\cdots}&=\sum\limits_{i|k}a_{\alpha_{i,1},\alpha_{i,2},\alpha_{i,3},\cdots}\\
&=\sum\limits_{\forall\beta_{k,j}\geqslant\alpha_{i,j}}a_{\alpha_{i,1},\alpha_{i,2},\alpha_{i,3},\cdots}
\end{align*}
$$
于是先线性筛出质数,再做一个高维前缀和即可。复杂度$O(n\log\log n)$

卡点:

C++ Code:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
const int maxn = 1e7 + 5;
typedef unsigned int uint;
typedef unsigned long long ull; struct random {
ull seed;
static const ull multiplier = 0x5deece66dll;
static const ull addend = 0xbll;
static const ull mask = 0xffffffffffffll; void set_seed (ull _seed) {seed = _seed;} uint next() {
seed = (seed * multiplier + addend) & mask;
return seed >> 16;
}
} rnd; int plist[maxn >> 3], ptot;
bool notp[maxn];
void sieve(const int n) {
for (int i = 2; i <= n; ++i) {
if (!notp[i]) plist[ptot++] = i;
for (int j = 0, t; (t = i * plist[j]) <= n; ++j) {
notp[t] = 1;
if (i % plist[j] == 0) break;
}
}
} int n;
uint s[maxn];
int main() {
std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0);
std::cin >> n >> rnd.seed;
for (int i = 1; i <= n; ++i) s[i] = rnd.next();
sieve(n);
for (int i = 0; i < ptot; ++i) {
const int P = plist[i];
for (int j = 1, t; (t = j * P) <= n; ++j)
s[t] += s[j];
}
uint ans = 0;
for (int i = 1; i <= n; ++i) ans ^= s[i];
std::cout << ans << '\n';
return 0;
}

  

[SOJ #112]Dirichlet 前缀和的更多相关文章

  1. Dirichlet 前缀和的几种版本

    [模板]Dirichlet 前缀和 求 \[B[i] = \sum_{d|i} A[d] \] $ n \le 2\times 10^{7} $ 看代码: for( int i = 1 ; i < ...

  2. luoguP5495:Dirichlet 前缀和

    题意:给定数组a[]的生成方式,然后b[i]=∑a[j]  ,(i%j==0),求所有b[i]的异或和.所有运算%2^32; 思路:高维前缀和的思想,先筛出所有素数,然后把每个素数当成一维,那么分开考 ...

  3. LGP5495 Dirichlet 前缀和

    题目 不是很明白为什么要叫做模板 考虑到\(a_i\)能对\(b_j\)产生贡献,当且仅当\(a_i=\prod p_k^{a_k},b_j=\prod p_k^{b_k},\forall k \ a ...

  4. 【学习笔记】Dirichlet前缀和

    题目戳我 \(\text{Solution:}\) 观察到一个\(a_i\)若对\(a_j\)有贡献,则必须\(i\)的所有质因子幂次小于等于\(j\)的质因子幂次. 于是,我们可以枚举质数的倍数并累 ...

  5. CSP 2019 退役记

    声明:博主不会时空穿越,也没有造成恐慌,不应禁赛三年 Day0 上午:打板子 Polya定理; exkmp; exbsgs; 乘法逆元; 矩阵快速幂; 扫描线; ST表; excrt; Dirichl ...

  6. 【题解】「MCOI-02」Convex Hull 凸包

    题目戳我 \(\text{Solution:}\) \[\sum_{i=1}^n \sum_{j=1}^n \rho(i)\rho(j)\rho(\gcd(i,j)) \] \[=\sum_{d=1} ...

  7. [MySQL登录错误] ERROR1045 (28000): Access denied for user 'omonroy'@'20.112.251.19' (using password:YES)

    收到美国那边同事carl的call说用户登录不上去了,不过2个礼拜前他还用的好好的,他给我发email了,他有急事需要处理麻烦我记尽快协助,他在email有截取错误信息: root@xxxxx:/ho ...

  8. BZOJ 1101 [POI2007]Zap ——Dirichlet积

    [题目分析] Dirichlet积+莫比乌斯函数. 对于莫比乌斯函数直接筛出处理前缀和. 对于后面向下取整的部分,可以分成sqrt(n)+sqrt(m)部分分别计算 学习了一下线性筛法. 积性函数可以 ...

  9. 附近的人,附近的卖家(geohash+前缀树)

    http://www.cnblogs.com/LBSer/p/3310455.html http://blog.csdn.net/shixiaoguo90/article/details/253137 ...

随机推荐

  1. 洛谷 P1821 [USACO07FEB]银牛派对Silver Cow Party 题解

    P1821 [USACO07FEB]银牛派对Silver Cow Party 题目描述 One cow from each of N farms (1 ≤ N ≤ 1000) conveniently ...

  2. Flask報錯 KeyError 'SQLALCHEMY_TRACK_MODIFICATIONS'.md

    KeyError: 'SQLALCHEMY_TRACK_MODIFICATIONS' 关于flask-sqlalchemy中出现的 KeyError: 'SQLALCHEMY_TRACK_MODIFI ...

  3. 【BIRT】汉化设计器

    点击下面文字即可下载汉化包 birt汉化_plugins.rar 下载完成之后,解压: 将上述文件copy到目录../eclipse/plugins/下即可 文件复制后,重新启动eclipse,则已经 ...

  4. Research Guide for Neural Architecture Search

    Research Guide for Neural Architecture Search 2019-09-19 09:29:04 This blog is from: https://heartbe ...

  5. hive时间戳转换&UDF更新

    from_unixtime 时间戳转换,如果带毫秒数的,除以1000. # ) ,'yyyy/MM/dd HH:mm:ss') as dt; reload function 今天碰到udf发布后,有时 ...

  6. join方法

    用join拼接两个字符串 a='hehe' b='wawa' print(''.join((a,b))) #'hehewawa' 用join拼接列表中的字符串 l=['a''b','c','d'] p ...

  7. 解决VS Code开发Python3语言自动补全功能

    1.打开设置界面 2)使用快捷键组合[Ctrl+Shift+p] . 输入setting,选中首选项的user setting模式设置界面 在打开的User Settings文件界面,搜索:pytho ...

  8. openresty开发系列33--openresty执行流程之3重写rewrite和重定向

    openresty开发系列33--openresty执行流程之3重写rewrite和重定向 重写rewrite阶段 1)重定向2)内部,伪静态 先介绍一下if,rewrite指令 一)if指令语法:i ...

  9. matlab学习笔记10 一般运算符

    一起来学matlab-matlab学习笔记10 10_1一般运算符 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合应用>张德丰等著 感谢张 ...

  10. prettier

     prettier,是一个自以为是 Opinionated 的代码格式化工具,用来批量处理旧代码的统一. 涉及引号,分号,换行,缩进. prettier 支持我们大前端目前大部分语言处理,包括 Jav ...