Нам нужно найти упорядоченные пары (a,b).
(2‹=s‹=10^12) и (0‹=x‹=10^12)
Например -
s=9 x=5 Количество упорядоченных пар = 4{(2,7),(7,2)(3,6)(6,3)}
Может кто-нибудь, пожалуйста, дайте мне способ решить этот вопрос !!!
Нам нужно найти упорядоченные пары (a,b).
(2‹=s‹=10^12) и (0‹=x‹=10^12)
Например -
s=9 x=5 Количество упорядоченных пар = 4{(2,7),(7,2)(3,6)(6,3)}
Может кто-нибудь, пожалуйста, дайте мне способ решить этот вопрос !!!
Вот логика пусть числа будут а и б мы знаем
s = a + b
x = a ^ b
следовательно
x = (s-b) ^ b
Поскольку мы знаем x и знаем s, поэтому для всех целых чисел, идущих от 0 до s, просто проверьте, выполняется ли это последнее уравнение
вот код для этого
public List<Pair<Integer>> pairs(int s, int x) {
List<Pair<Integer>> pairs = new ArrayList<Pair<Integer>>();
for (int i = 0; i <= s / 2; i++) {
int calc = (s - i) ^ i;
if (calc == x) {
pairs.add(new Pair<Integer>(i, s - i));
pairs.add(new Pair<Integer>(s - i, i));
}
}
return pairs;
}
Пара классов определяется как
class Pair<T> {
T a;
T b;
public String toString() {
return a.toString() + "," + b.toString();
}
public Pair(T a, T b) {
this.a = a;
this.b = b;
}
}
Код для проверки этого:
public static void main(String[] args) {
List<Pair<Integer>> pairs = new Test().pairs(9,5);
for (Pair<Integer> p : pairs) {
System.out.println(p);
}
}
Выход:
2,7
7,2
3,6
6,3