无
2026-08-20 20:51:14
发布于:广东
2阅读
0回复
0点赞
#include <bits/stdc++.h>
using namespace std;
using int64 = long long;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while (t--) {
int n, m;
cin >> n >> m;
// 预处理 n 的所有因子
vector<int> divisors;
for (int d = 1; d * d <= n; d++) {
if (n % d == 0) {
divisors.push_back(d);
if (d != n / d) divisors.push_back(n / d);
}
}
sort(divisors.begin(), divisors.end());
// 标记哪些数是 n 的因子
vector<bool> isDivisor(m + 1, false);
for (int d : divisors) {
if (d <= m) isDivisor[d] = true;
}
int64 ans = 0;
// 枚举 i 和 j
for (int i = 0; i <= m; i++) {
for (int j = 0; j <= m; j++) {
int a = i ^ j;
// 如果 a 为 0,则 gcd(0, b) = b,需要 b | n
// 否则需要 gcd(a, b) | n
// 统计满足条件的 k 的个数
for (int k = 0; k <= m; k++) {
int b = j ^ k;
int g = std::gcd(a, b);
if (g == 0) {
// gcd(0, 0) 定义为 0,但 b 不可能为 0?实际上可能
// 当 a=0 且 b=0 时,方程 0*x + 0*y = n 无解(n>0)
continue;
}
if (n % g == 0) {
ans++;
}
}
}
}
cout << ans << '\n';
}
return 0;
}
这里空空如也



有帮助,赞一个