最短代码的主要计算

Esp*_*sen 3 java primes code-golf

我学校的计算机科学专业报(称为readme,它是挪威语,第19页)有一个有趣的竞争,为下面的问题编写尽可能短的Java代码.

接受一个整数(作为字符串数组的第一个条目中的字符串,因为Java main方法只接受字符串数组)作为参数,并首先写出所有低于此数字的数字作为素数,然后写出所有数字不是素数.最短的代码获胜!

作为答案,我将发布赢得竞争的最短Java代码.我想知道Stack Overflow社区是否可以制作更短的代码如果您了解挪威语,您会看到如果您已经完成它就可以赢得一瓶香槟,但不幸的是,比赛的最后提交日期已经结束.

你怎么解决这个问题?

Unk*_*own 6

在将标题更改为"Java"之前,我已经在Haskell中执行此操作.由于这是一个社区维基,无论如何它都在这里.

primes n = 
let sieve (p:xs) = p : sieve [x | x<-xs, x `mod` p /= 0] in 
let primes = takeWhile (<n) $ sieve [2..] in 
([0..n] \\ primes, primes)

*Main> primes 20
([0,1,4,6,8,9,10,12,14,15,16,18,20],[2,3,5,7,11,13,17,19])
Run Code Online (Sandbox Code Playgroud)

(编辑:)缩短名称和删除空格使它成为79个字符:

p n=let s(p:xs)=p:s[x|x<-xs,x`mod`p/=0];r=takeWhile(<n)$s[2..]in(r,[0..n-1]\\r)
Run Code Online (Sandbox Code Playgroud)

这里也会交换结果对的订单,并n-1根据规范使用.

使用次优试验将其降至50个字符:

p n=partition(\k->all((>0).rem k)[2..k-1])[2..n-1]
Run Code Online (Sandbox Code Playgroud)