I am doing a (typical) assignment of finding primes. I thought I'd be clever and, for large numbers, skip the division process with this trick:
def div5(candidate):
return str(candidate)[-1] == "5"
Adding 5 to itself a few thousand times seems like a waste (I only need the last member), but I wanted to be sure.
credit to unutbu on Measure time elapsed in Python?
%>python -mtimeit -s"import intDiv" "intDiv.div5(2147483645)"
1000000 loops, best of 3: 0.272 usec per loop
%>python -mtimeit -s"import strDiv" "strDiv.str5(2147483645)"
1000000 loops, best of 3: 0.582 usec per loop
For clarification, here are the two methods I defined.
def div5(maxi): return not (maxi%5)
def str5(maxi): return str(maxi)[-1] == '5'
This is too slow. How can I analyze the last member of str(maxi), without converting the whole number (needlessly)?
Thanks to @Claudiu for help with cleaning up the eyesores.
% python -mtimeit "str(2147483645)"
1000000 loops, best of 3: 0.321 usec per loop
% python -mtimeit "2147483645 % 5"
10000000 loops, best of 3: 0.0351 usec per loop
% python -mtimeit "'2147483645'[-1]"
10000000 loops, best of 3: 0.0349 usec per loop
I'd say the bottleneck is converting to a string.