wayne
发表于 2010-1-11 11:53:39
学习了。。。
竟然还有Obfuscated code
我在Wikipedia上发现一个打印素数的代码,呵呵,没看懂~~
void primes(int cap) {
int i, j, composite, t = 0;
while(t < cap * cap) {
i = t / cap;
j = t++ % cap;
if(i <= 1);
else if(!j)
composite = j;
else if(j == i && !composite)
printf("%d\t",i);
else if(j > 1 && j < i)
composite += !(i % j);
}
}
int main(void) {
primes(100);
}
wayne
发表于 2010-1-11 11:56:32
还有一个稍微简洁但不可思议的版本,竟然可以把printf放在前面~~
#include <stdio.h>
#include <stdbool.h>
int main()
{
bool isPrime;
int i,j;
for(i=2;i<1000;i=i+1)
isPrime=true;
for(i=2;i<1000;i=i+1)
{
if (isPrime)
{
printf("%d ",i);
for(j=2*i;j<1000;j=j+i)
isPrime=false;
}
}
return 0;
}
winxos
发表于 2010-1-11 12:18:26
那个执行结果还可以运行,生成 さく > そく > もん >さく.....
真没见过这么强劲的!
shshsh_0510 发表于 2010-1-11 11:44 http://bbs.emath.ac.cn/images/common/back.gif
哇,我之前还没注意,
这个程序太变态了,
真是令人费解,
之前尝试着输出自己就已经很难了,
还是混乱编码的循环输出日文。。。
Frankenstein
发表于 2010-1-11 12:22:38
#include <stdio.h>
#include <stdbool.h>
int main()
{
bool isPrime;
int i,j;
for(i=2;i<1000;i=i+1)
isPrime=true;
for(i=2;i<1000;i=i+1)
{
if (isPrime)
{
printf("%d ",i);
for(j=2*i;j<1000;j=j+i)
isPrime=false;
}
}
return 0;
}就是最简单的筛法嘛。
wayne
发表于 2010-1-11 12:26:27
呵呵,你很牛~~
对于我来说,感觉那个printf的位置很是让我意外。。
wayne
发表于 2010-1-11 12:31:05
shshsh_0510和winxos该不会都懂日文吧??
{:3_63:}
sunwukong
发表于 2010-1-11 12:39:01
这个太牛了!
mathe
发表于 2010-1-11 13:31:25
学习了。。。
竟然还有Obfuscated code
我在Wikipedia上发现一个打印素数的代码,呵呵,没看懂~~
void primes(int cap) {
int i, j, composite, t = 0;
while(t < cap * cap) {
i = t / cap; ///用一重循环t表示两重循环i,j, for(i=0;i<cap;i++)for(j=0;j<cap;j++)
j = t++ % cap;
if(i <= 1); ///测试i是否素数,if(i<=1)continue;
else if(!j) /// if(j==0), 是j循环的开始,将composite初始化为0
composite = j;
else if(j == i && !composite) ///内层循环到达j==i就可以不用继续测试了.
printf("%d\t",i);
else if(j > 1 && j < i) //如果j是i的因子,composite加1
composite += !(wayne 发表于 2010-1-11 11:53 http://bbs.emath.ac.cn/images/common/back.gif
wayne
发表于 2010-1-11 13:46:02
谢谢mathe的注释
我看到了有3个else if头就大了,呵呵
winxos
发表于 2010-1-11 16:27:45
29# wayne
我也看了一下这个程序,本质上仍然是除法,效率不高。
再:正入手学习日语呢。