质数很大


11

给定一个很大的数字(以10为底),例如1234567891011121314151617,请在其中找到素数“ subnumbers”。
素数“子数”是连续的数字序列(从输入中获取),代表一个素数(以10为底)。

  • 输入:数字(字符串,文件或任何您喜欢的数字)。
  • 输出:所有素数子数字都以某种方式分隔(在列表,文件,逗号分隔的字符串中……)如果结果为空,则可以采用任何喜欢的约定(硬编码字符串,空字符串,乱码,但程序不应崩溃。
  • 示例
    1234->
    2、3、23 6542-> 5、2
    14-> [..空输出]

这是代码高尔夫球。最短的程序获胜!
[edit]:附加规则,程序必须说明!并不是每个人都精通果冻:)




1
未标明。做任何你喜欢的事。
Regis Portalez '18

1
提示:接受答案为时尚早。它可以阻止其他人发布解决方案。
毛茸茸的

2
@RegisPortalez欢迎您,很好的挑战!我发现,PPCG不再像以前在网络中的其他站点那样使用“接受”功能。我们倾向于以任何语言评价好答案。
ngm

Answers:


6

05AB1E(旧版),3个字节

Œʒp

在线尝试!

输入的子字符串为素数。


这将很难缩短:)
Regis Portalez,

此任务的正确语言
乔纳森·艾伦

5
@mob取决于编码。在05AB1E编码中,此答案的长度为3个字节。
丹尼斯

2
据此,34567 = 13 * 2659是素数,似乎是错误的:tio.run
##

2
@frosqh实际上,这是新的05AB1E版本中p(质数)函数的错误:tio.run / ##yy9OTMpM/ f//6KRTkwr @/ zc2MTUzBwA它已在存储库中修复,但尚未推送到TIO上。同时,我已将答案切换到旧版。
Kaldo

6

Perl 6,28个字节

{grep &is-prime,+«m:ex/.+/}

在线尝试!

:ex匹配运算符的(“ exhaustive”)标志m使它返回的所有可能匹配项.+(即,一个或多个字符的每个子串),甚至是重叠的。超级操作员将该Match对象列表转换为数字,然后使用对其过滤素数grep &is-prime


在这里,我将与{+«m:ex/(.+)<?{$0.is-prime}>/}
布拉德·吉尔伯特

@ BradGilbertb2gills我也尝试过!我有点失望,事实证明那是更长的时间。
肖恩

感谢您的解释-对像我这样的Perl 4恐龙总是有帮助的!
Toby Speight,


5

Python 2中66 65个字节

P=k=1
n=input()
while~n+k:
 if`k`in`n`>0<P%k:print k
 P*=k*k;k+=1

在线尝试!


应该是while k<=n0字节,成本为while~n+k
Jonathan Allan

@JonathanAllan谢谢。起初,我认为应该将数字本身从输出中排除,但事实并非如此。
ovs

@JonathanAllan能否请您从while声明中解释代码?我以前没有看过这种类型的代码。还没有看到使用``,它有什么用?
tarit goswami

1
@taritgoswami while stmt:将运行,只要stmt它的值被python认为是真实的即可。Python中唯一虚假的整数是0。因此,代码将以方式运行~n+k != 0~是按位补码运算符,~n等效于-n - 1~n + k != 0<=> -n - 1 + k != 0<=> k != n + 1。由于我们增加k1每一个操作,k != n + 1在这种情况下,等同k <= n
ovs '18

1
@taritgoswami并且`n`repr(n)Python 2中的相同(在Python 3中不起作用)。
ovs '18


3

果冻 5  4 字节

-1感谢Kevin Cruijssen(是的别名ÆP

ẆḌẒƇ

一个接受数字列表*的单子链接,该列表产生一个质数整数列表。

*通过“字符串,文件或任何您喜欢的东西”-取整数,在代码前加上一个 D

在线尝试!

怎么样?

ẆḌẒƇ - Link: list of integers (digits)   e.g. [1,2,3,4]
Ẇ    - non-empty contiguous substrings        [[1],[2],[3],[4],[1,2],[2,3],[3,4],[1,2,3],[2,3,4],[1,2,3,4]]
 Ḍ   - convert to decimal (vectorises)        [1,2,3,4,12,23,34,123,234,1234]
   Ƈ - filter keep if:
  Ẓ  -   is prime?                            [2,3,23]

ÆP如果我没有记错?
凯文·克鲁伊森

是的,这是新的别名之一-谢谢!
乔纳森·艾伦

2

Java的8,148个 147字节

n->{for(int l=n.length(),i=l,j;i-->0;)for(j=l;j>i;){long k=2,x=new Long(n.substring(i,j--));for(;k<x;x=x%k++<1?0:x);if(x>1)System.out.println(x);}}

在线尝试。

说明:

n->{                     // Method with String parameter and no return-type
  for(int l=n.length(),  //  Length of the input-String
          i=l,j;         //  Temp-integers
      i-->0;)            //  Loop `i` in the range [length, 0)
    for(j=l;j>i;){       //   Inner loop `j` in the range [length, 0)
      for(long k=2,      //    Set `k` to 2
               x=new Long(n.substring(i,j--)
                         //    Take the substring [`i`, `j`) from the input,
            );           //    convert it to a long, and set it as `x`
          k<x;           //    Inner loop as long as `k` is still smaller than `x`
        x=x%k++<1?       //     If `x` is divisible by `k`:
           0             //      Set `x` to 0
          :              //     Else:
           x);           //      Leave `x` unchanged
      if(x>1)            //    If `x` is now larger than 1 (a.k.a. If `x` is a prime):
        System.out.println(x);}}
                         //     Print `x` with a trailing newline to STDOUT

2

MATL,9字节

&XfXUtZp)

在线尝试!

说明

&Xf   % Implicit input: string. Push cell array of non-empty substrings
XU    % Convert to number. Vectorizes
t     % Duplicate
Zp    % Isprime. Vectorizes.
)     % Index. Keeps substrings indicated by the previous result. Implicit display

2

Bash + GNU核心实用程序:80 77字节

for i in $(seq `tee a|wc -c`)
{
grep -oE .{$i}<a|factor|grep -oP ': \K\d+$'
}

这不可能是最短的,但是我很难提出更好的选择。把招工广告!

通过仅坚持POSIX,我得到了82:

for i in $(seq `tee a|wc -c`)
{
grep -oE .{$i}<a|factor|awk -F\  'NF<3{print$2}'
}

Bash字符串切片可以帮助吗?在参数之前扩展括号范围很可惜...
Toby Speight

@TobySpeight需要两个循环(一个循环开始,一个循环结束),更不用说您不能在切片替换中使用变量。Zsh允许它,但是!在我看来,导致短路的主要途径是使用Awk生成所有子字符串。
markasoftware


1

Python 2115个 114字节

f=lambda s:s and[n for n in[int(s[j:])for j in range(len(s))]if n>1and all(n%i for i in range(2,n))]+f(s[:-1])or[]

在线尝试!


if~-n*all(n%i for i in range(2,n))节省4
Xcoder先生



0

Pyth,8个字节

fP_TsM.:

测试套件

将输入作为字符串,输出整数列表。也可以将输入作为int 通过`在末尾添加一个额外的字节。

说明:
fP_TsM.:  | Full code
fP_TsM.:Q |  with implicit variables added
          | Print (implicit)
      .:Q |  list of all substrings of the input
    sM    |   converted to integers
fP_T      |    filtered for prime numbers

`转换intstr



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.