Smalltalk, Squeak 4.x flavour
Let's say we read n from stdin in 38 chars (this kind of requirement is just killing!)
n:=FileStream stdin nextLine asNumber.
If only product were defined in Collection in base image, this could be as simple as
^(0class primesUpTo:n+1)product
or:
^((2to:n)select:#isPrime)product
Unfortunately, we have to code #product by ourself in 48 chars (86 total).
(0class primesUpTo:n+1)inject:1into:[:p :i|p*i]
Or if primesUpTo: is considered as a library, we can use isPrime in 62 chars (100 total)
^(1to:n)inject:1into:[:p :i|i isPrime ifTrue:[p*i]ifFalse:[p]]
If even isPrime is forbidden we can find by ourselves in 67 chars (105 total)
p:=1. 2to:n do:[:i|((2to:i-1)anySatisfy:[:d|i\\d=0])or:[p:=p*i]].^p
Or for the fun, we can use a sieve in 108 chars (146 total)
s:=(p:=y:=1)<<n-2. 2to:n do:[:x|y:=(z:=y)*2+1.(z+1bitAnd:s)=0or:[p:=p*x.s:=z<<(n//x*x+x)//y+z+1bitAnd:s]].^p
Explanation of the sieve at http://smallissimo.blogspot.fr/2011/07/revisiting-sieve-of-erathostenes.html
Nota: bitAnd: has a short-cut operator & in Pharo 2.0, which would reduce Sieve cost to 94 chars (132 total)
s:=(p:=y:=1)<<n-2. 2to:n do:[:x|y:=(z:=y)*2+1.z+1&s=0or:[p:=p*x.s:=z<<(n//x*x+x)//y+z+1&s]].^p