@abhishek :<br><br>Can you show me the code ?<br>10**12 is way too much. My code gives output within a minute for 10**8 and fails. Ofcourse I need to apply some algo here. What do you exactly mean by taking out rightmost 7 digits ?<br>
<br><div class="gmail_quote">On Mon, Sep 14, 2009 at 8:14 PM, Abhishek Mishra <span dir="ltr"><<a href="mailto:ideamonk@gmail.com">ideamonk@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
I remember doing something very inaccurate a long time ago for this -<br>
1. find everything in a loop<br>
2. everytime you encounter some zeros, strip them<br>
3. everytime after stripping it exceeds say 7 digits, take out<br>
rightmost 7 digits for accuracy's sake<br>
4. proceed till loop ends<br>
5. print out the rightmost 5 digits of what remains<br>
<br>
Highly inaccurate but helped crossing icpc prelims in 1st year because<br>
there were humans who checked my solution with smaller inputs :)<br>
<br>
On Mon, Sep 14, 2009 at 6:36 PM, Shashwat Anand<br>
<div class="im"><<a href="mailto:anand.shashwat@gmail.com">anand.shashwat@gmail.com</a>> wrote:<br>
><br>
</div><div><div></div><div class="h5">> How do we calculate last 5-digits of 10**12 ignoring trailing zeros. The code i wrote works good until 10**8 and after that take ages.<br>
> The source of problem is Project Euler : <a href="http://projecteuler.net/index.php?section=problems&id=160" target="_blank">http://projecteuler.net/index.php?section=problems&id=160</a><br>
><br>
> The code is pasted here : <a href="http://paste.pocoo.org/show/139745/" target="_blank">http://paste.pocoo.org/show/139745/</a><br>
><br>
> 1 '''<br>
> 2 For any N, let f(N) be the last five digits before the trailing zeroes in N!.<br>
> 3 For example,<br>
> 4<br>
> 5 9! = 362880 so f(9)=36288<br>
> 6 10! = 3628800 so f(10)=36288<br>
> 7 20! = 2432902008176640000 so f(20)=17664<br>
> 8<br>
> 9 Find f(1,000,000,000,000)<br>
> 10 '''<br>
> 11 def f(n):<br>
> 12 fac = 1<br>
> 13 i = 1<br>
> 14 #for i in range(1, n+1):<br>
> 15 while i < n + 1:<br>
> 16 fac = int(str(fac * i).strip('0')) % 100000<br>
> 17 i += 1<br>
> 18 return fac<br>
> 19<br>
> 20 print f(1000000000000)<br>
><br>
> PS. hope posting algorithmic doubts will not be considered spamming :)<br>
><br>
><br>
</div></div><div><div></div><div class="h5">> _______________________________________________<br>
> BangPypers mailing list<br>
> <a href="mailto:BangPypers@python.org">BangPypers@python.org</a><br>
> <a href="http://mail.python.org/mailman/listinfo/bangpypers" target="_blank">http://mail.python.org/mailman/listinfo/bangpypers</a><br>
><br>
_______________________________________________<br>
BangPypers mailing list<br>
<a href="mailto:BangPypers@python.org">BangPypers@python.org</a><br>
<a href="http://mail.python.org/mailman/listinfo/bangpypers" target="_blank">http://mail.python.org/mailman/listinfo/bangpypers</a><br>
</div></div></blockquote></div><br>