[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: LOGO-L> Factorials



Yehuda Katz wrote:
> 
> Hi,
> 
> Many years ago, using BASIC, we encountered the following problem:
> Find all 3-digit numbers, that equal the sum of the factorials of their
> digits.
> In other words: We need all 3-digit numbers of the form ABC which
> maintain: ABC=A!+B!+C!
> 
> I wanted to test UCBLogo to see how good it solves that problem.
> Here's one possible solution:
> 
> ========================================
> to solve
> for[num 100 999][
>     if equalp :num(sum fact item 1 :num
>                        fact item 2 :num
>                        fact item 3 :num)
>     [pr :num]]
> end
> 
> to fact :n
> op ifelse :n<2[1][:n*fact :n-1]
> end
> ========================================
> 

Why keep computing the SAME factorials over an over again.
Here is a common performance trick. This NEW code will run
twice as fast on my OLD P133 than your OLD code will run
on your NEW P266 (i.e. it's about 4 times as fast) :-)

A great teacher once told me, a slow algorithm is still slow
on ANY computer.

on a P133

solve_old
145
8.38166666666667

solve_new
145
2.29333333333333

to compute_facts :n
make "myfacts (array :n 0)
repeat :n [setitem repcount-1 :myfacts fact_real repcount-1]
end

to fact :n
op item :n :myfacts
end

to fact_real :n
op ifelse :n<2[1][:n*fact_real :n-1]
end

to solve_new
make "start timemilli
compute_facts 10
for[num 100 999][
    if equalp :num(sum fact item 1 :num
                       fact item 2 :num
                       fact item 3 :num)
    [pr :num]]
show (timemilli - :start) / 600
end

to solve_old
make "start timemilli
for[num 100 999][
    if equalp :num(sum fact_real item 1 :num
                       fact_real item 2 :num
                       fact_real item 3 :num)
    [pr :num]]
show (timemilli - :start) / 600
end

> 
> [[Yehuda]]
> 
> ---------------------------------------------------------------
> Please post messages to the Logo forum to logo-l@gsn.org.  Mail
> questions about the list administration to logofdn@gsn.org.  To
> unsubscribe send    unsubscribe logo-l    to majordomo@gsn.org.

-- 
===============================================================
George Mills
email: mills@softronix.com
http://www.softronix.com
The www page contains some very powerful educational software.
Our single most important investment is our kids.
---------------------------------------------------------------
Please post messages to the Logo forum to logo-l@gsn.org.  Mail
questions about the list administration to logofdn@gsn.org.  To
unsubscribe send    unsubscribe logo-l    to majordomo@gsn.org.



Global SchoolNet Foundation - Linking Kids Around the World!
Copyright GSN - All Rights Reserved - Comments & Questions
Visit GSN's Global Schoolhouse for more exciting learning resources!
Search our Site - Home