@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">&lt;<a href="mailto:ideamonk@gmail.com">ideamonk@gmail.com</a>&gt;</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&#39;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">&lt;<a href="mailto:anand.shashwat@gmail.com">anand.shashwat@gmail.com</a>&gt; wrote:<br>
&gt;<br>
</div><div><div></div><div class="h5">&gt; 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>
&gt; The source of problem is Project Euler : <a href="http://projecteuler.net/index.php?section=problems&amp;id=160" target="_blank">http://projecteuler.net/index.php?section=problems&amp;id=160</a><br>
&gt;<br>
&gt; The code is pasted here : <a href="http://paste.pocoo.org/show/139745/" target="_blank">http://paste.pocoo.org/show/139745/</a><br>
&gt;<br>
&gt;  1 &#39;&#39;&#39;<br>
&gt;   2 For any N, let f(N) be the last five digits before the trailing zeroes in N!.<br>
&gt;   3 For example,<br>
&gt;   4<br>
&gt;   5 9! = 362880 so f(9)=36288<br>
&gt;   6 10! = 3628800 so f(10)=36288<br>
&gt;   7 20! = 2432902008176640000 so f(20)=17664<br>
&gt;   8<br>
&gt;   9 Find f(1,000,000,000,000)<br>
&gt;  10 &#39;&#39;&#39;<br>
&gt;  11 def f(n):<br>
&gt;  12     fac = 1<br>
&gt;  13     i = 1<br>
&gt;  14     #for i in range(1, n+1):<br>
&gt;  15     while i &lt; n + 1:<br>
&gt;  16         fac = int(str(fac * i).strip(&#39;0&#39;)) % 100000<br>
&gt;  17         i += 1<br>
&gt;  18     return fac<br>
&gt;  19<br>
&gt;  20 print f(1000000000000)<br>
&gt;<br>
&gt; PS. hope posting algorithmic doubts will not be considered spamming :)<br>
&gt;<br>
&gt;<br>
</div></div><div><div></div><div class="h5">&gt; _______________________________________________<br>
&gt; BangPypers mailing list<br>
&gt; <a href="mailto:BangPypers@python.org">BangPypers@python.org</a><br>
&gt; <a href="http://mail.python.org/mailman/listinfo/bangpypers" target="_blank">http://mail.python.org/mailman/listinfo/bangpypers</a><br>
&gt;<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>