Mỗi lần tôi sử dụng phương pháp Euclid để kiểm tra xem hai số có đồng nguyên tố hay không. Nhưng có một giải pháp mà đã sử dụng mã này để kiểm tra đồng primeness, và thời gian thực hiện của thành viên này là nhanh hơn nhiều so với phương pháp Euclid: (source)Giải thích cách kiểm tra đồng thời hoạt động
private static boolean isCoprime(long u, long v) {
if (((u | v) & 1) == 0)
return false;
while ((u & 1) == 0)
u >>= 1;
if (u == 1)
return true;
do {
while ((v & 1) == 0)
v >>= 1;
if (v == 1)
return true;
if (u > v) {
long t = v;
v = u;
u = t;
}
v -= u;
} while (v != 0);
return false;
}
Tôi không thể hiểu được thế nào là này đang làm việc. (Tôi hiểu các hoạt động bitwise.) Ví dụ: những dòng này có nghĩa là gì ...
if (((u | v) & 1) == 0)
return false;
Tại sao chỉ cần trả về false? Ngoài ra còn có những dòng khác mà tôi không thể hiểu những gì đang xảy ra. Nếu bất kỳ một trong các bạn có thể bạn chỉ cần cho tôi một số hướng dẫn nó sẽ được giúp đỡ nhiều.
Bạn có thể giải thích cho tôi phần khác của mã này .. nếu có thể? – user4890159
@ user4890159 Phần nào khác? – JNYRanger
@ user4890159 Trong mỗi lần lặp, bạn chia 'u' và' v' cho đến khi cả hai đều là lẻ (hoặc '0', đó là, bithifting-magic làm gì) và sau đó cập nhật' u' và 'v'. Bạn có thể muốn xem xét [hoạt động bitwise] (https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html) – Turing85