Input
- Hai số nguyên dương a và b
0 < a, b < 1000
Output
- 0, nếu a không chia hết cho b
- 1, nếu a chia hết cho b
ví dụ
- Input 21 7
- Output: 1
mọi người giúp em làm theo phép dịch bit với ạ, em định dùng dịch bit để xét bit dấu mà mãi không ra :((
mọi người giúp em làm theo phép dịch bit với ạ, em định dùng dịch bit để xét bit dấu mà mãi không ra :((
Sao cậu lại cần phép dịch bit thay vì check (a % b == 0)?
Và cậu đã thử xét bit dấu như thế nào rồi? Cho tớ coi code được không?
dạ ý em định xét (a%b) -1 nếu chia hết thì nó sẽ mang dấu âm dịch bit thì sẽ ra 1 rồi lật bit ạ . còn nếu dư thì nó sẽ dương khi dịch bit ra 0 . em nghĩ thế nhưng code nó toàn lỗi ạ
Nhiều khi nhìn code dịch bit cũng k hiểu. Hình như nó là dấu & hay sao ấy
& ở chỗ nào ạ
Hở?
Ý tớ là, có vấn đề gì với code này không cậu?
int a = 21, b = 7;
if(a % b == 0) {
printf("1\n");
} else {
printf("0\n");
}
Nếu làm thuần tuý bài này bằng bitwise thì bài này khá hay đấy chứ.
a, b < 1000 nên 1 số a, b không dài quá 10 bit. Ký hiệu b|a tức là a chia hết cho b.
Đặt a = 2^m \cdot x, b = 2^n \cdot y (m, n lẻ). Nhận thấy gcd(2^m, y) = gcd(2^n, x) = 1 nên muốn b|a thì 2^n | 2^m và y|x, suy ra m \ge n.
Với b \le 18 ta có bài toán Regular Expression for Binary Numbers Divisible by n - codewars.
Một số case đặc biệt:
Nếu b = 2^k - 1 \Rightarrow 2^{ik} \equiv 1\ \forall i
Nếu b = 2^k + 1 \Rightarrow 2^{2ik} \equiv 1,\ 2^{(2i+1)k} \equiv -1\ \forall i
dạ ko vấn đề gì ạ … lúc đầu e hiểu sai là ko so sánh tức là ko đc dùng cả phép bằng luon
dạ em chưa hiểu ý anh lắm
Mình đã nói ý gì đâu, mới bôi ra vài chữ thôi mà.
nếu dùng đến bit thì anh có ý tưởng gì không cho em tham khảo với ạ
Không so sánh à ?
if(a % b){
// không chia hết
}
else{
// chia hết
}
dạ em cảm ơn . em nhầm ạ
Đề yêu cầu không so sánh chứ đâu bảo dùng phép toán bit? Như cách @Duong_Act là chuẩn luôn rồi.
Chấm online thì có danh sách các kí hiệu bị cấm chứ.
Chủ thớt thử post đề lên xem đề có cấm những ký tự gì nào.
Dạ em làm bài trong nhóm để luyện tập thôi nên cũng không có nói rõ cấm như nào ạ
while(a > b) a -= b
print(!a)
print(!(a%b))