是超级素数吗?


22

背景

一个超贷是一个素数,其指数中的所有质数的列表也是素数。该序列如下所示:

3、5、11、17、31、41、59、67、83、109、127、157、179、191,...

这是OEIS中的序列A006450

挑战

给定一个正整数,确定它是否是超质数。

测试用例

2:假
3:正确
4:假
5:是的
7:假
11:是
13:假
17:是
709:是的
851:错误
991:是的

计分

这是,因此每种语言中最短的答案将获胜。


6
2的索引是多少?是1还是0
丹尼斯

1
@Dennis序列是1索引的;的2的指数是1
musicman523

2
读完超级素数后首先想到的是什么?还是super ^ 3-primes?宇宙中的原子数或第11个超级^ 11-素数中更大的原子是多少?您,亲爱的互联网人,在我的黄金时段还偷了其他几个小时!
J_F_B_M

@J_F_B_M以此为基础挑战!:D
musicman523

1
@J_F_B_M 11是超级素数,超级素数列表中的索引也是一个超级素数(3),因此第11个超级素数是一个超级超超级素数
Skidsdev

Answers:



14

Mathematica,26个 23个字节

感谢user202729节省了3个字节。

PrimeQ/@(#&&PrimePi@#)&

这利用了Mathematica使得大多数无意义的表达式都没有得到评估(在这种情况下,And是两个数字的逻辑)的事实,并且Map可以应用于任何表达式,而不仅仅是列表。因此,我们计算And输入的素数和素数索引,它仍然保持原来的样子,然后Map对这个表达式进行素数测试,将的两个操作数And转换为布尔值,And然后可以对其进行求值。


1
23个字节:PrimeQ/@(#&&PrimePi@#)&
user202729

@ user202729很好,谢谢。:)
Martin Ender

10

果冻,6个字节

ÆRi³ÆP

在线尝试!

使用与Japt答案相同的技术:生成最大为n的质数,获取该列表中n的索引,并检查其素数。如果n本身不是素数,则索引为0,它也不是素数,因此无论如何都返回0


9

Japt13 11字节

õ 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

4

Python 3中104个 97 93字节

p=lambda m:(m>1)*all(m%x for x in range(2,m))
f=lambda n:p(n)*p(len([*filter(p,range(n+1))]))

返回0/ 1,最多4个字节,如果它是True/False

在线尝试!


1
0/1可以。好答案!由于您从未使用过的值f,因此可以像这样重新格式化代码,并将其从字节数中排除。
musicman523

@ musicman523感谢您的提示!
C McAvoy

3

果冻,7个字节

ÆCÆPaÆP

在线尝试!

ÆC计算小于或等于输入的质数(因此,如果输入是第n个质数,则返回n)。然后ÆP测试该索引的素数。最后,a在此结果与ÆP原始输入的(素数测试)之间进行逻辑与。



2

05AB1E,6个字节

ÝØ<Øså

在线尝试!

说明

ÝØ<Øså
Ý      # Push range from 0 to input
 Ø     # Push nth prime number (vectorized over the array)
  <    # Decrement each element by one (vectorized)
   Ø   # Push nth prime number again
    s  # swap top items of stack (gets input)
     å # Is the input in the list?

2

Pyth,12个字节

&P_QP_smP_dS

在线尝试!

说明

&P_QP_smP_dS
                Implicit input
       mP_dS    Primality of all numbers from 1 to N
      s         Sum of terms (equal to number of primes ≤ N)
    P_          Are both that number
&P_Q            and N prime?

2

Pyke,8个字节

sI~p>@hs

在这里尝试!

s        -  is_prime(input)
 I~p>@hs - if ^:
  ~p>    -    first_n_primes(input)
     @   -    ^.index(input)
      h  -   ^+1
       s -  is_prime(^)


1

QBIC,33个字节

~µ:||\_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.

1

Mathematica,35个 29字节

P=Prime;!P@P@Range@#~FreeQ~#&

@MartinEnder的-6个字节


P@P@Range@#应该节省一堆。
Martin Ender

1

Haskell,121个字节

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)

1
(\(_,x)->x)snd(\(x,_)->p x)(p.fst)。双方fstsnd在前奏,所以没有必要进口。
Laikoni '17

不要经常使用反引号r x=elem x$take x s。但是,在这种情况下,您可以转为自由(再次引入反引号)并忽略函数名称:elem<*>(`take`s)
nimi



1

Matlab,36 34字节

感谢Tom Carpenter,节省了2个字节。

使用内置函数的非常幼稚的实现:

isprime(x)&isprime(nzz(primes(x)))

1
仅对于八度,您还可以使用(p=@isprime)(x)&p(nnz(primes(x)))
汤姆·卡彭特

1

Python 2,89个字节

def a(n):
 r=[2];x=2
 while x<n:x+=1;r+=[x]*all(x%i for i in r)
 return{n,len(r)}<=set(r)

在线尝试!

构造r,素数列表<= n; 如果n为素数,n则为len(r)'th素数。因此n是r中的超素iff n和r中的len(r)。



0

朱莉娅0.6,61字节

如果x是超质数,则返回1,否则返回0。

而不使用isprime-kind函数。

x->a=[0,1];for i=3:x push!(a,0i%(2:i-1))end;a[sum(a)]&a[x]
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.