CF1184A2 Heidi Learns Hashing (Medium)

题目描述

在学习了多项式哈希之后,Heidi 决定了解一下移位异或哈希。她遇到了这样一个有趣的问题。 给定一个长度为 $n$ 的二进制字符串 $y \in \{0,1\}^n$,求有多少个不同的 $k$($0 \leq k < n$)满足存在 $x \in \{0,1\}^n$,使得 $y = x \oplus \mbox{shift}^k(x)$。 其中,$\oplus$ 表示按位异或操作,$\mbox{shift}^k$ 表示将一个二进制字符串循环右移 $k$ 位的操作。例如,$001 \oplus 111 = 110$,$\mbox{shift}^3(00010010111000) = 00000010010111$。

输入格式

第一行包含一个整数 $n$($1 \leq n \leq 2 \cdot 10^5$),表示二进制字符串 $y$ 的长度。 第二行包含二进制字符串 $y$。

输出格式

输出一个整数,表示满足条件的 $k$ 的个数。

说明/提示

在第一个样例中: - $1100\oplus \mbox{shift}^1(1100) = 1010$ - $1000\oplus \mbox{shift}^2(1000) = 1010$ - $0110\oplus \mbox{shift}^3(0110) = 1010$ 不存在 $x$ 使得 $x \oplus x = 1010$,因此答案为 $3$。 由 ChatGPT 4.1 翻译