【问题标题】:What is the shortest way to calculate the nth prime?计算第 n 个素数的最短方法是什么?
【发布时间】:2010-02-14 06:24:25
【问题描述】:

到“计算第n个素数”的最短C代码是什么?

重要字符中最短,即分号、非空白字符、关键字和逗号的数量

输入:

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

输出:

在输入 n 之后,将第 n 个素数打印到标准输出,并用新行分隔。

(您可以假设素数 n


测试用例:

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]));
  }

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

【问题讨论】:

  • 这就是代码高尔夫!!!最少的击键次数。帮助您更好地理解您正在编码的语言。
  • @nthrgeek,你也应该看到meta.stackexchange.com/questions/24242
  • 您能否详细解释一下输入或举个例子?目前还不完全清楚你到底应该做什么。例如,您说“每个 line 将有许多 N 值,每个值由 new line 这样分隔”。我认为输入输出的示例会有所帮助。
  • 代码必须是 C 语言吗?如果没有,请删除“c”标签。
  • 我从来都不喜欢 SO 上的 code-golf,但由于语言限制,这简直无法忍受。不是一个真正的问题。甚至没有关闭。

标签: c code-golf primes


【解决方案1】:

数学:13 个字符

Prime@Input[]

Prime 函数是内置的。


作为 REPL:34 个字符

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

或者,在 29 个字符中精确执行 10,000 次:

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

【讨论】:

    【解决方案2】:

    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-golflanguage-agnostic。)

    【讨论】:

      【解决方案3】:

      这是 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 个字符(不含空格)

      【讨论】:

      • @MAk:我只在寻找 C 解决方案。
      • 那么请在您的问题中说明。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-20
      • 2020-04-11
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 2019-10-11
      相关资源
      最近更新 更多