On Feb 3, 2:31 am, "Jesse Chounard" <[EMAIL PROTECTED]> wrote: > On 31 Jan 2007 19:13:14 -0800, [EMAIL PROTECTED] > > <[EMAIL PROTECTED]> wrote: > > Its not an homework. I appeared for EA sports interview last month. I > > was asked this question and I got it wrong. I have already fidlled > > around with the answer but I don't know the correct reasoning behind > > it. > > I think this works:
You think wrongly. Inspection reveals that it is obviously incorrect for N == 0. Trivial testing reveals that it is wrong for about 6 out of every 7 cases. > > >>> def div7 (N): > > ... return ((N * 9362) >> 16) + 1 > ...>>> div7(7) > 1 > >>> div7(14) > 2 > >>> div7(700) > 100 > >>> div7(70000) > > 10000 > > The coolest part about that (whether it works or not) is that it's my > first Python program. I wrote it in C first and had to figure out how > to convert it. :) Try testing algorithms with a pencil on the back of an envelope first. The uncoolest part about that is that your test data is horribly deficient: >>> for N in xrange(0, 23): ... a = ((N * 9362) >> 16) + 1 ... e = N // 7 ... print N, a, e, a == e ... 0 1 0 False 1 1 0 False 2 1 0 False 3 1 0 False 4 1 0 False 5 1 0 False 6 1 0 False 7 1 1 True 8 2 1 False 9 2 1 False 10 2 1 False 11 2 1 False 12 2 1 False 13 2 1 False 14 2 2 True 15 3 2 False 16 3 2 False 17 3 2 False 18 3 2 False 19 3 2 False 20 3 2 False 21 3 3 True 22 4 3 False HTH, John -- http://mail.python.org/mailman/listinfo/python-list