[R53E]异或求和 - 代码源竞赛平台

时空限制

1S/512M

题目描述

设 f(x)f(x) 为满足 A⊕B=xA \oplus B = x 且 1≤A,B≤x1 \le A, B \le x 的正整数对 (A,B)(A, B) 的数量,其中 ⊕\oplus 表示按位异或运算。

给定一个正整数 nn,求出 ∑i=1nf(i)\sum_{i = 1}^{n} f(i) 对 109+710^9 + 7 取模后的值。

格式

输入格式

输入共一行,包含一个正整数 nn。

输出格式

输出共一行,包含一个整数,表示 ∑i=1nf(i)\sum_{i = 1}^{n} f(i) 对 109+710^9 + 7 取模后的值。

样例

样例输入 #1

5

样例输出 #1

4

样例解释 #1

  • f(1)=0f(1) = 0:没有满足 1≤A,B≤11 \le A, B \le 1 且 A⊕B=1A \oplus B = 1 的正整数对。
  • f(2)=0f(2) = 0:没有满足 1≤A,B≤21 \le A, B \le 2 且 A⊕B=2A \oplus B = 2 的正整数对。
  • f(3)=2f(3) = 2:满足条件的正整数对有 (1,2)(1, 2) 和 (2,1)(2, 1),因为 1⊕2=31 \oplus 2 = 3 且 1,2≤31, 2 \le 3。
  • f(4)=0f(4) = 0。
  • f(5)=2f(5) = 2:满足条件的正整数对有 (1,4)(1, 4) 和 (4,1)(4, 1),因为 1⊕4=51 \oplus 4 = 5 且 1,4≤51, 4 \le 5。

因此,∑i=15f(i)=0+0+2+0+2=4\sum_{i = 1}^{5} f(i) = 0 + 0 + 2 + 0 + 2 = 4。

数据规模

注意:你只有通过了子任务的所有测试点,才能获得对应子任务的分数。

子任务编号 分数 n≤n\le
11 3030 100100
22 3030 10610^6
33 4040 101810^{18}

对于 100%100\% 的数据,1≤n≤10181 \le n \le 10^{18}。