背景
一个超贷是一个素数,其指数中的所有质数的列表也是素数。该序列如下所示:
3、5、11、17、31、41、59、67、83、109、127、157、179、191,...
挑战
给定一个正整数,确定它是否是超质数。
测试用例
2:假 3:正确 4:假 5:是的 7:假 11:是 13:假 17:是 709:是的 851:错误 991:是的
计分
这是代码高尔夫球,因此每种语言中最短的答案将获胜。
一个超贷是一个素数,其指数中的所有质数的列表也是素数。该序列如下所示:
3、5、11、17、31、41、59、67、83、109、127、157、179、191,...
给定一个正整数,确定它是否是超质数。
2:假 3:正确 4:假 5:是的 7:假 11:是 13:假 17:是 709:是的 851:错误 991:是的
这是代码高尔夫球,因此每种语言中最短的答案将获胜。
Answers:
ÆRÆNċ
ÆRÆNċ Main link. Argument: n
ÆR Prime range; yield the array of all primes up to n.
ÆN N-th prime; for each p in the result, yield the p-th prime.
ċ Count the occurrences of n.
感谢user202729节省了3个字节。
PrimeQ/@(#&&PrimePi@#)&
这利用了Mathematica使得大多数无意义的表达式都没有得到评估(在这种情况下,And
是两个数字的逻辑)的事实,并且Map
可以应用于任何表达式,而不仅仅是列表。因此,我们计算And
输入的素数和素数索引,它仍然保持原来的样子,然后Map
对这个表达式进行素数测试,将的两个操作数And
转换为布尔值,And
然后可以对其进行求值。
PrimeQ/@(#&&PrimePi@#)&
。
õ fj bU Ä j
与我最初提交的内容不同,这实际上非常简单:
õ fj bU Ä j
Uõ fj bU +1 j Ungolfed
Implicit: U = input integer
Uõ Generate the range [1..U].
fj Take only the items that are prime.
bU Take the (0-indexed) index of U in this list (-1 if it doesn't exist).
+1 j Add 1 and check for primality.
This is true iff U is at a prime index in the infinite list of primes.
Implicit: output result of last expression
~µ:||\_x0]{p=p-µq|~q=a|_xµp]q=q+1
~ | IF .... THEN (do nothing)
: the number 'a' (read from cmd line)
µ | is Prime
\_x0 ELSE (non-primes) quit, printing 0
] END IF
{ DO
In this next bit, q is raised by 1 every loop, and tested for primality.
p keeps track of how may primes we've seen (but does so negatively)
µq| test q for primality (-1 if so, 0 if not)
p=p- and subtract that result from p (at the start of QBIC: q = 1, p = 0)
~q=a| IF q == a
_xµp QUIT, and print the prime-test over p (note that -3 is as prime as 3 is)
] END IF
q=q+1 Reaise q and run again.
P=Prime;!P@P@Range@#~FreeQ~#&
@MartinEnder的-6个字节
P@P@Range@#
应该节省一堆。
f=filter
p x=2==(length$f(\a->mod(x)a==0)[1..x])
s=map(\(_,x)->x)$f(\(x,_)->p x)$zip[1..]$f(p)[2..]
r x=x`elem`(take x s)
(\(_,x)->x)
是snd
,(\(x,_)->p x)
是(p.fst)
。双方fst
并snd
在前奏,所以没有必要进口。