@Arun: (n & 3) is the bitwise logical product of the integer n and the binary number 0...0011. The result simply is the two low-order bits of n. I.e., if n = 0...011100110 in binary, then (n & 3) is 0...010 in binary, because the two lowest order bits of n are 1 and 0.
There is an explanation of why the code works in http://groups.google.com/group/algogeeks/msg/5fd29d9458057f9f. In that explanation, n is written in the form 4*a + b. (n >> 2) gives a, and (n & 3) gives b. So we start with n and produce (a - b), which is a multiple of 5 if and only if n is a multiple of 5. Dave On Jan 20, 10:59 am, Arun Vishwanathan <aaron.nar...@gmail.com> wrote: > @dave or anyone: can u pls explain the logic of n&3 in dave's solution? why > is it subtracted from n(which is divided by 4 using >>2) and what does n& 3 > indicate? > > > > > > On Sat, May 7, 2011 at 9:38 AM, Dave <dave_and_da...@juno.com> wrote: > > @Umer: Do you suppose that you can convert an int into a string > > without using division or mod, either directly or indirectly? > > > Dave > > > On May 4, 1:12 am, Umer Farooq <the.um...@gmail.com> wrote: > > > I'm surprised to see that why are you guys making this problem so > > complex. > > > This problem can be solved in two steps only. > > > > 1- Convert the given int into string > > > 2- Check if the last character is 0 or 5. // it yes, then return true > > else > > > return false > > > > for e.g. > > > > 125 (last character is 5 ... therefore it is divisible by 5) > > > 120 (last character is 0 ... therefore it is divisible by 5) > > > 111 (last character is 1 ... therefore it is not divisible by 5) > > > > The pseudo-code has been written in my above email. > > > > On Wed, May 4, 2011 at 1:49 AM, Dave <dave_and_da...@juno.com> wrote: > > > > @anshu: Spoiler alert... I was thinking of something more along the > > > > line > > > > > int DivisibleBy5 (int n) > > > > { > > > > n = n > 0 ? n : -n; > > > > while( n > 0 ) > > > > n = (n >> 2) - (n & 3); > > > > return (n == 0); > > > > } > > > > > To see that it works, write n as n = 4*a + b, where 0 <= b <= 3. Then > > > > the iteration replaces n by a - b. Consider (4*a + b) + (a - b), the > > > > sum of two consecutive values of n. This simplifies to 5*a, which is a > > > > multiple of 5. Thus, n is a multiple of 5 before an iteration if and > > > > only if it also is a multiple of 5 afterwards, > > > > > It is clearly log n because n is replaced by a number no greater than > > > > n/4 on each iteration. > > > > > Examples: > > > > n = 125. The sequence of iterates is 30, 5, 0. Ergo, 125 is a multiple > > > > of 5. > > > > n = 84. The sequence of iterates is 21, 4, -1. Ergo, 84 is not a > > > > multiple of 5. > > > > > Dave > > > > > On May 3, 3:13 am, anshu <anshumishra6...@gmail.com> wrote: > > > > > algorithm: > > > > > > if any number(a) is divisible by 5 it can be wriiten as 4*b + b --> > > > > > this cleary shows the last two bit of a & b will be same. > > > > > > lets understand by an example (35)10 = (100011)2 > > > > > > xx1100 > > > > > + xx11 > > > > > --------- > > > > > 100011 > > > > > > now this clearly shows we can calculate the unknowns(x) by traversing > > > > > right to left > > > > > > code: > > > > > > int main() > > > > > { > > > > > int n, m; > > > > > cin >> n; > > > > > m = n; > > > > > > int a, b; > > > > > int i=2; > > > > > > a = (m&3)<<2; > > > > > b = (m&3); > > > > > m >>= 2; > > > > > > bool rem = 0,s,r; > > > > > > while (m>3) > > > > > { > > > > > r = a&(1<<i); > > > > > s = r^(m&1)^rem; > > > > > b = b|(s<<i); > > > > > a = a|(s<<(i+2)); > > > > > rem = (r&s)|(s&rem)|(r&rem) ; > > > > > i++; > > > > > m >>= 1; > > > > > } > > > > > > if (a+b == n) cout << "yes\n"; > > > > > else cout << "no\n"; > > > > > > return 0; > > > > > > }- Hide quoted text - > > > > > > - Show quoted text - > > > > > -- > > > > You received this message because you are subscribed to the Google > > Groups > > > > "Algorithm Geeks" group. > > > > To post to this group, send email to algogeeks@googlegroups.com. > > > > To unsubscribe from this group, send email to > > > > algogeeks+unsubscr...@googlegroups.com. > > > > For more options, visit this group at > > > >http://groups.google.com/group/algogeeks?hl=en. > > > > -- > > > Umer- Hide quoted text - > > > > - Show quoted text - > > > -- > > You received this message because you are subscribed to the Google Groups > > "Algorithm Geeks" group. > > To post to this group, send email to algogeeks@googlegroups.com. > > To unsubscribe from this group, send email to > > algogeeks+unsubscr...@googlegroups.com. > > For more options, visit this group at > >http://groups.google.com/group/algogeeks?hl=en. > > -- > "People often say that motivation doesn't last. Well, neither does bathing > - that's why we recommend it daily." -- You received this message because you are subscribed to the Google Groups "Algorithm Geeks" group. To post to this group, send email to algogeeks@googlegroups.com. To unsubscribe from this group, send email to algogeeks+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/algogeeks?hl=en.