1 solutions
-
0
给定 ,,求 的值。
看到 ,容易想到该性质:
其中, 表示 的最高位, 表示 的最低位(即个位)。
通俗地说,就是:一个数除以 的余数等于它各个位上的数除以 的余数之和再除以 的余数。
证明很简单:
首先, 可以写成如下形式:。
考虑对 进行拆分,显然,对于任何一个 ,有 。
那么 就可以写为:
很显然,对于任何的 ,结果一定等于 。
于是 就等于 ,也就是 。
那么这题就可以转化为求 的值,用等差数列求和公式可以做到每个问题 解决。
需要注意的是,在使用等差数列求和公式的时候,由于 的分母太大,即使用 也会溢出,所以可以判断 和 的奇偶性,把偶数的那个先除以 ,模 ,再把另一个数模 。最后两数相乘,模 。
#include <bits/stdc++.h> using namespace std; #define int long long int q; signed main() { cin >> q; while (q--) { int l, r; cin >> l >> r; int a = l + r, b = r - l + 1; (a % 2 == 0) ? (a /= 2) : (b /= 2); cout << ((a % 9) * (b % 9)) % 9 << endl; } return 0; }
- 1
Information
- ID
- 3871
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- 3
- Tags
- # Submissions
- 5
- Accepted
- 2
- Uploaded By