计算第n个素数的最短方法是什么?

时间:2010-02-14 06:24:26

标签: c code-golf primes

最短的 C代码到“计算 n -th prime ”的最短内容是什么?

重要字符最短,即分号,非空格字符,关键字和逗号的数量。

输入:

来自标准输入的整数 n ,由新行分隔。输入将由EOF终止。

输出:

在输入 n 之后,将 n -th prime打印到由新行分隔的标准输出。

(您可以假设素数<10,000,即 n <1,230。)


测试用例:

Input:
    1
    2
    4
    8
    32
    999
    42
    5

Output:
    2
    3
    7
    19
    131
    7907
    181
    11

我的尝试:

 #define m 10000
 a[m],b[m],x;

 main(i,j){
   for(i=2;i<m;i++)
      {
       if (!a[i])
       for (b[++x]=i,j=2*i;j<m;j+=i)
            a[j]=1;
      }
   for(;~scanf("%d",&i);printf("%d\n",b[i]));
  }

对于这个问题,可读性并不是一个问题。在时间和内存方面更昂贵的代码,但满足约束条件将在这里被认为更好。

3 个答案:

答案 0 :(得分:7)

Mathematica:13个字符

Prime@Input[]

Prime功能是内置的。


作为REPL: 34 个字符

While[0<(s=Input[]),Print@Prime@s]

或以 29 字符执行10,000次:

Print@Prime@Input[]~Do~{1*^4}

答案 1 :(得分:4)

C:104个字符

i,t,n;g(){!--n?t=1:g();for(i=++t;1<--i;i=t%i?i:t++);}main(){for(;~scanf("%d",&n);g(),printf("%d\n",t));}

(当然,它以指数时间运行。)

(顺便说一句,限制为C很无聊。现在大多数code-golf都是language-agnostic。)

答案 2 :(得分:2)

这是Python的尝试。我不明白你在输入格式中究竟是什么意思,但这应该照顾所有情况。此外,它非常慢并且在准备好处理输入之前需要几秒钟来生成素数。奇怪的输入解析会导致它在开始生成输出之前立即在所有输入中啜饮,因此您应该输入数字并使用EOF结束列表,然后一次性获取答案(或从文件重定向输入)。

import sys
p=[2]
for i in xrange(3,105000,2):
    if all(i%x for x in p):
        p.append(i)
print '\n'.join(str(p[int(i)-1]) for i in sys.stdin.read().split())

152个字符(带空格)

130个字符(不含空格)