前x个素数中的加法素数


16

附加质数的定义:

  • 其中恰好有2除数的数称为数。

  • 质数及其位数之和也是质数称为加数质数


任务:

给定一个整数x,计算第一个x素数中的所有加法素数,同时2考虑第一个素数和加法素数。数字以10为基数表示。

规则:

  • 输出由第一个x素数中的所有加法素数组成
  • 0 < x < 151,针对这一挑战,出于功能目的
  • 由于加性质数均为整数,因此不允许使用小数(例如:您应输出2,而不是2.0),并且它们不得显示为小数。

例子:

10 -> 2 3 5 7 11 23 29

说明:

前10个素数是2 3 5 7 11 13 17 19 23 29,并且仅2 3 5 7 11 23 29具有它们的数位素数之和,分别是2,3,5,7,2,5,11,所以它们是加法素数

根据的说明example 1,其他测试用例可能是:

2 -> 2 3

25 -> 2 3 5 7 11 23 29 41 43 47 61 67 83 89

7 -> 2 3 5 7 11

排行榜:


注意:请阅读新编辑的规则1,它会稍微改变输出格式


您的代码应尽可能短,因为这是,所以以字节为单位的最短答案会获胜。祝好运!


没关系。不过,我建议您等待24小时左右,因为每次您接受答案时,他们都会得到15次代表,但是当您不接受时,他们会失去代表。有时坐过山车并不断失去和获得代表是有点令人沮丧的。
Rɪᴋᴇʀ

Answers:


8

Pyke,9个 7字节

~p>#Yss

在线尝试!

单个字节is_prime仅在3小时前被推送。Github提交

~p      -    All the prime numbers
  >     -   first input of them
   #Yss -  filter(^)
    Y   -     digits(^)
     s  -    sum(^)
      s -   is_prime(^)

3
您是否只是编辑语言以适应这一挑战?:d
Džuris

所以... s在数字上表示is_prime,在列表上表示总和?
科纳·奥布莱恩

@ ConorO'Brien是的,我为列表和整数重载了它
Blue

@Džuris不,我一直有一段时间的意思,因为我没有一个用于执行质数检查的节点,仅分解为质数和除数。_P在这种情况下,我不得不做的是再长1个字节,这是我必须要做的
Blue

1
成为“赢得挑战的最新语言功能”的新竞争者?在电线下大约2个小时?
Sparr'3

8

Python 2,124 118字节

在Riker的帮助下:

n,f,P=input(),filter,lambda n:all(n%i for i in range(2,n))
f(lambda x:P(sum(map(int,`x`)))&P(x),f(P,range(2,n*n))[:n])

原版的:

n,o,c,P=input(),0,2,lambda n:all(n%i for i in range(2,n))
while o<n:
 o+=P(c)
 if P(sum(map(int,`c`)))and P(c):print c
 c+=1

在Python中检查素数并不有趣。


我(阅读:让conor为我编写出色的J代码)已经用9n进行了测试,这是行不通的。:/ n ** 2可以工作,但是要花1个字节。
Rɪᴋᴇʀ

尝试n*nn**2
康纳尔奥布莱恩

8

罗达136个 135字节

f n{P=[2]S=[2]seq 3,863|{|i|{P|{P+=i;s=0;((""..i)/"")|parseInteger _|s+=_;S+=i if[s in P and not(i in S)]}if{|p|[i%p>0]}_}if[#P<n]}_;S}

在线尝试!

该函数返回所请求的附加质数。

用法:main { f(25) | print ap for ap }代码使用版本0.12(位于branch中)roda-0.12

取消高尔夫:

function f(n) {
    primes := [2]
    ultraprimes := [2]
    seq(3, 863) | for i do
        break if [ #primes = n ]
        if [ i%p != 0 ] for p in primes do
            primes += i
            sum := 0
            ((""..i)/"") | parseInteger _ | sum += digit for digit
            ultraprimes += i if [ sum in primes and not (i in ultraprimes) ]
        done
    done
    ultraprimes
}

1
语言不错!您很久以前就做成了这个样子?10/10,看起来很酷。
Rɪᴋᴇʀ

语言整洁!您如何运行该程序?
Kritixi Lithos

正要问同样的事情。尽管我查看了文档,但根本无法运行或编译源代码。你的方法是什么?
Xcoder先生17年

@KritixiLithos @ Xcoder123它需要Java 8和Gradle。我在此答案中使用的版本是0.12(在其自己的分支中)。必须以递归方式克隆存储库。要创建可运行的jar,请调用gradle fatJar。编译时是否出现任何错误?
fergusq

@fergusq Running gradle fatJar似乎并没有为我创造一个罐子
Kritixi Lithos

5

Perl 6、53字节

{grep *.comb.sum.is-prime,grep(*.is-prime,0..*)[^$_]}

尝试一下

展开:

{
  grep
    *.comb.sum.is-prime, # find the ultra primes from:
    grep(
      *.is-prime,        # find the primes
      0..*               # from all integers
    )[ ^$_ ]             # grab only the first x primes
}

如果更改了此挑战,以便您使用了前x个超极本,则可以将其缩短为

{grep({($_&.comb.sum).is-prime},0..*)[^$_]}

5

Python 2中96 87个字节

p=-input(),0;m=k=1
while sum(p):
 m*=k*k;k+=1;p+=m%k,
 if m%k*p[int(`k`,36)%35]:print k

感谢@xnor打高尔夫球9个字节!

在线尝试!


看起来使用指标变量列表更短。
xnor

数字总和可以按原样缩短int(`k`,36)%35。所有输入将足够小,足以满足要求。
xnor


哇!我不知道我怎么想的布尔字典,但不是布尔元组(事后诸葛亮),但sum(p)int(`k`,36)%35是别的东西...谢谢!
丹尼斯

5

Mathematica,61 47字节

Prime@Range@#~Select~PrimeQ@*Tr@*IntegerDigits&

对Mathematica的速记语法不完全熟悉-那是@*什么?该*看起来并不像它在正确的地方是乘法?
numbermaniac

3
@numbermaniac它是功能组成。f@*g本质上是f@g@##&
马丁·恩德

4

果冻,10 字节

ÆNDS$€ĖÆPM

在线尝试!

怎么样?

略有不同的方法...

ÆNDS$€ĖÆPM - Main link: n (>0)           e.g. 10
ÆN         - nth prime number                 29
     €     - for each in range(1,nth prime)   [1,    2,    3,   ..., 27,    28,     29]
    $      - last two links as a monad
  D        -     decimal digit list          [[1],  [2],  [3],  ...,[2,7], [2,8],  [2,9]]
   S       -     sum                          [1,    2,    3,   ..., 9,     10,     11]
      Ė    - enumerate                       [[1,1],[2,2],[3,3],...,[9,27],[10,28],[11,29]]
       ÆP  - is prime? (vectorises)          [[0,0],[1,1],[1,1],...,[0,1], [0,0],  [1,1]]
         M - indices of maximal elements     [       2,    3,   ...,                29]

3
很好用Ė
丹尼斯


3

果冻,11字节

ÆN€DS$ÆP$Ðf

在线尝试!

说明:

ÆN€DS $ÆP$Ðf主链接(参数:z)
N生成前z个素数。
   DS $取数字和。
      CheckP检查是否灌注。
        $加入最后两个链接,创建一个单子。
         Ðf仅保留符合上述条件的元素。

我不高兴了。


2

MATL,15 13字节

@Luis节省了2个字节

:Yq"@V!UsZp?@

MATL Online上尝试

说明

        % Implicitly grab input as a number (N)
:       % Create an array [1...N]
Yq      % Get the k-th prime for each element k in that array
"       % For each element in this list
  @     % Get the current element
  V!U   % Break it into digits
  s     % Sum up the digits
  Zp    % Determine if this is a prime number
  ?@    % If it is, push the value to the stack
        % Implicit end of for loop and implicit display of the stack

@LuisMendo啊!我知道有某种方法可以缩短第一部分。谢谢
Suever,2017年


1

欧姆,10字节(CP437)

@▓_π;░_}Σp

如果我有矢量化或前N个素数的一个分量,这会短很多,但是,,,我没有遇到这个挑战(但是我现在就做!)。

说明:

@▓_π;░_}Σp    Main wire, arguments: a

@▓  ;         Map...over the range (1..n)
  _π            nth prime
     ░        Select from ToS where...
      _}Σ       The sum of all digits
         p      is prime

1

PowerShell,120字节

for($n=$args[0];$n){for(;'1'*++$i-notmatch($s='^(?!(..+)\1+$)..')){}if('1'*([char[]]"$i"-join'+'|iex)-match$s){$i};$n--}

在线尝试!

在PowerShell中进行主检查很烂。

for循环从输入$n下降到0。在内部循环,我们用黄金发电机$i,然后检查if中的数位之和(-join'+'|iex)也是一个素数。如果是这样,我们就$i开始使用管道。无论哪种情况,我们都会递减$n--,外for循环继续。结果$is从管道中收集,Write-Output在程序完成时隐式发生。


1

Bash + GNU实用程序+ bsd-games程序包,69

primes 2|sed -rn 'h;s/./ + &/g;s/.*/expr &|factor/e;/\w\s/!{x;p};'$1q

在线尝试


0

MATL,13字节

:YqtFYA!XsZp)

MATL在线上尝试一下

说明

:      % Range [1 2 ... n], where n is implicit input
Yq     % Array of first n prime numbers
t      % Duplicate
FYA    % Convert to decimal digits. Gives a matrix, where each original 
       % number corresponds to a row. Left-pads with zeros if needed
!Xs    % Sum of rows
Zp     % Is prime? (element-wise)
)      % Use as logical index into the array of the first n prime numbers
       % Implicitly display
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.