2 条题解

  • 0
    @ 2026-5-3 17:45:50

    一个不一样的证明

    $$\sum_{i=1}^{x} \left\lfloor \dfrac{x}{i} \right\rfloor \bmod 2 = \left\lfloor \sqrt{x} \right\rfloor \bmod 2$$

    的思路,不需要任何数论知识。

    考虑反比例函数 y=xiy=\dfrac{x}{i} 在第一象限内的图象:

    注意到第一象限内 y=xiy=\dfrac{x}{i} 下的整点集大小即为原式,且这个点集关于直线 y=xy=x 对称。

    考虑将不在 y=xy=x 图象上的点两两对应,由于对 22 取模,所以只考虑 y=xy=x 图象上点,数量是 n\sqrt{n} 个。

    于是原结论成立,剩下的求 $\sum\limits_{i=1}^{n} \left( \left\lfloor \sqrt{x} \right\rfloor \bmod 2 \right)$ 是简单的,不再赘述。

    另外这个题评 6 是不是太高了?

    • 0
      @ 2026-4-5 11:16:54

      注意到内层等于 1∼n1 \sim n 的因数个数和,而有且只有完全平方数有奇数个因数,因此原式等于:

      $$\sum_{x=1}^{n} \left( \left\lfloor \sqrt x \right\rfloor \bmod 2 \right)$$

      按 ⌊n⌋\left\lfloor \sqrt{n} \right\rfloor 的奇偶性分类讨论推式子即可。

      #include <bits/stdc++.h>
      using namespace std;
      int main()
      {
      	int T;
      	scanf("%d", &T);
      	while (T--)
      	{
      		long long n;
      		scanf("%lld", &n);
      		long long c = sqrtl(n + 0.5);
      		if (c % 2 == 0) printf("%lld\n", c * (c + 1) / 2);
      		if (c % 2 == 1) printf("%lld\n", c * (c - 1) / 2 + n - c * c + 1);
      	}
      	return 0;
      }
      
      • 1

      [CFCOI Collection 2] Not a Number Theoretical Blocking Problem

      信息

      ID
      244
      时间
      1000ms
      内存
      512MiB
      难度
      5
      标签
      递交数
      6
      已通过
      5
      上传者