fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. using ll = long long;
  4.  
  5. void solve() {
  6. ll x, m;
  7. cin >> x >> m;
  8.  
  9. ll ans = 0;
  10.  
  11. // 計算小於 x 的情況
  12. for(ll y = 1; y <= min(x,m); y++) {
  13. ll xor_val = x ^ y;
  14. if(xor_val % y == 0 || xor_val % x == 0) {
  15. ans++;
  16. }
  17. }
  18.  
  19. // 計算大於 x 的情況
  20. // 當 y = k*x 時,x ^ y = x ^ (k*x)
  21. // 這種情況下,我們可以直接計算有多少個 k 符合條件
  22. if(x > 0) {
  23. ll k = (m + x - 1) / x; // 向上取整
  24. if(k > 1) {
  25. ans += k - 1;
  26. }
  27. }
  28.  
  29. cout << ans << "\n";
  30. }
  31.  
  32. int main() {
  33. ios::sync_with_stdio(false);
  34. cin.tie(nullptr);
  35.  
  36. int t;
  37. cin >> t;
  38. while(t--) {
  39. solve();
  40. }
  41.  
  42. return 0;
  43. }
Success #stdin #stdout 0.01s 5280KB
stdin
5
7 10
2 3
6 4
1 6
4 1
stdout
3
3
2
6
1