P15434 [蓝桥杯 2025 国 Python B] 三角形构造

题目描述

小蓝正在画三角形,他先规定了三角形的一条边的边长为 $x$,你需要找出有多少个正整数 $y$ 满足以下所有条件: - $1 \le y \le x$; - $x, y$ 以及 $x | y$ 这三个数可以构成一个非退化的三角形的边长。 其中,$x | y$ 表示 $x$ 和 $y$ 的二进制按位或(Bitwise OR)运算结果。 提示:一个三角形是非退化的,意味着它的三条边长 $a, b, c$ 都必须为正,并且满足三角不等式:$a + b > c$、$a + c > b$、$b + c > a$。 如果其中任何一个不等式取等号(例如 $a + b = c$),则该三角形是退化的(三点共线)。

输入格式

输入一行包含一个正整数 $x$。

输出格式

输出一行包含一个整数表示答案。

说明/提示

### 样例说明 符合条件的 $y$ 有:$2, 3, 6, 7, 8, 9, 10$。 ### 评测用例规模与约定 对于 $30\%$ 的评测用例,$1 \le x \le 10^3$; 对于所有评测用例,$1 \le x \le 10^{16}$。