#P5495. 【模板】Dirichlet 前缀和

【模板】Dirichlet 前缀和

题目背景

模板题,无背景。

题目描述

给定一个长度为 nn 的数列 a1,a2,a3,,ana_1,a_2,a_3,\dots,a_n

现在你要求出一个长度为 nn 的数列 b1,b2,b3,,bnb_1,b_2,b_3,\dots,b_n,满足

bk=ikaib_k=\sum_{i|k}a_i

由于某些神秘原因,这里的 bkb_k 要对 2322^{32} 取模。

输入格式

为了避免过大的输入,本题的输入使用随机数生成器。

输入中只有一行两个整数 n,seedn,seed。其中 seedseed3232 位无符号整数,用来生成数据。

接下来,你要调用 nn 次随机数生成器,分别生成 a1ana_1\sim a_n

对于C/C++选手,生成器模板如下:

#define uint unsigned int
uint seed;
inline uint getnext(){
	seed^=seed<<13;
	seed^=seed>>17;
	seed^=seed<<5;
	return seed;
}

对于Pascal选手,生成器模板如下:

var seed:dword;
function getnext:dword;
begin
	seed:=seed xor(seed shl 13);
	seed:=seed xor(seed shr 17);
	seed:=seed xor(seed shl 5);
	getnext:=seed;
end;

注意:所有 nn 个数均为 3232 位无符号整数

输出格式

为了避免过大的输出,你只需输出一个 3232 位无符号整数,表示所有 bib_i 的异或和。

5 1477

2608816472

提示

样例中,数列 aa 为 $397153977, 974453892, 352446086, 334987182, 2086335567$。

数列 bb 为 $397153977, 1371607869, 749600063, 1706595051, 2483489544$。

限制与约定

对于 100%100\% 的数据, 1n2×1071\leq n\leq 2\times 10^70seed<2320\leq seed< 2^{32}