最短的 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]));
}
对于这个问题,可读性并不是一个问题。在时间和内存方面更昂贵的代码,但满足约束条件将在这里被认为更好。
答案 0 :(得分:7)
Prime@Input[]
Prime
功能是内置的。
作为REPL: 34 个字符
While[0<(s=Input[]),Print@Prime@s]
或以 29 字符执行10,000次:
Print@Prime@Input[]~Do~{1*^4}
答案 1 :(得分:4)
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个字符(不含空格)