Something like this? n<-1000 pythag<-function(n){ for(i in 3:((n-3)/3)) for(j in (i+1):((n-i)/2)) if(i^2+j^2==(n-i-j)^2) return(i*j*(n-i-j)) } system.time(print(pythag(n)))
Interesting -- seems to improve speed by ~12%. Not sure if that's because stop() has more overhead, or if functions are innately faster somehow. Still seems like there should be a way to break out of nested loops, though... -b On Tue, Dec 18, 2012 at 4:50 PM, Duncan Murdoch <murdoch.dun...@gmail.com> wrote: > On 12-12-18 1:02 PM, McCloskey, Bryan wrote: >> >> Hey all, >> >> I'm currently working through the problems at Project Euler -- this >> question came up while working on Problem 9 >> (http://projecteuler.net/problem=9): >> >> "A Pythagorean triplet is a set of three natural numbers, a < b < c, >> for which, a^2 + b^2 = c^2. For example, 3^2 + 4^2 = 9 + 16 = 25 = >> 5^2. There exists exactly one Pythagorean triplet for which a + b + c >> = 1000. Find the product abc." >> >> Not too hard: >> >> n=1000 >> for(i in 1:floor(n/3)) >> for(j in (i+1):floor(n/2-i/2)) >> if(i^2+j^2==(n-i-j)^2) {print(i*j*(n-i-j)); stop()} >> >> I could just let the for loops finish looping after it finds the >> answer, and it would still run in under a second, but the goal of >> Project Euler is sort of to see how efficiently (and quickly) you can >> solve these problems, so in that spirit I would like to break out of >> the for loops early once the answer is found -- hence the call to >> stop(). However, this seems "improper", as it throws up an error. Is >> there a way to exit out of both for loops with a call to "break" or >> similar that would not throw errors (or is it fine the way I've coded >> it)? (I realize I could put an "if(i^2+j^2==(n-i-j)^2) break" >> statement in the outer loop, but again that's inefficient, as it's >> checking that conditional hundreds of times.) >> >> So is there a way to "cleanly" break out of multiple loops? > > > Put them in a function, and return from the function. > > Duncan Murdoch > ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.