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
我也看了一下这个程序,本质上仍然是除法,效率不高。
再:正入手学习日语呢。
页: 1 2 [3] 4
查看完整版本: Hello,world!