找回密码
 欢迎注册
楼主: wayne

[欣赏] Hello,world!

[复制链接]
 楼主| 发表于 2010-1-11 11:53:39 | 显示全部楼层
学习了。。。 竟然还有Obfuscated code 我在Wikipedia上发现一个打印素数的代码,呵呵,没看懂~~
  1. void primes(int cap) {
  2. int i, j, composite, t = 0;
  3. while(t < cap * cap) {
  4. i = t / cap;
  5. j = t++ % cap;
  6. if(i <= 1);
  7. else if(!j)
  8. composite = j;
  9. else if(j == i && !composite)
  10. printf("%d\t",i);
  11. else if(j > 1 && j < i)
  12. composite += !(i % j);
  13. }
  14. }
  15. int main(void) {
  16. primes(100);
  17. }
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-1-11 11:56:32 | 显示全部楼层
还有一个稍微简洁但不可思议的版本,竟然可以把printf放在前面~~
  1. #include <stdio.h>
  2. #include <stdbool.h>
  3. int main()
  4. {
  5. bool isPrime[1000];
  6. int i,j;
  7. for(i=2;i<1000;i=i+1)
  8. isPrime[i]=true;
  9. for(i=2;i<1000;i=i+1)
  10. {
  11. if (isPrime[i])
  12. {
  13. printf("%d ",i);
  14. for(j=2*i;j<1000;j=j+i)
  15. isPrime[j]=false;
  16. }
  17. }
  18. return 0;
  19. }
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-1-11 12:18:26 | 显示全部楼层
那个执行结果还可以运行,生成 さく >  そく >  もん > さく..... 真没见过这么强劲的! shshsh_0510 发表于 2010-1-11 11:44
哇,我之前还没注意, 这个程序太变态了, 真是令人费解, 之前尝试着输出自己就已经很难了, 还是混乱编码的循环输出日文。。。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-1-11 12:22:38 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <stdbool.h>
  3. int main()
  4. {
  5. bool isPrime[1000];
  6. int i,j;
  7. for(i=2;i<1000;i=i+1)
  8. isPrime[i]=true;
  9. for(i=2;i<1000;i=i+1)
  10. {
  11. if (isPrime[i])
  12. {
  13. printf("%d ",i);
  14. for(j=2*i;j<1000;j=j+i)
  15. isPrime[j]=false;
  16. }
  17. }
  18. return 0;
  19. }
复制代码
就是最简单的筛法嘛。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-1-11 12:26:27 | 显示全部楼层
呵呵,你很牛~~ 对于我来说,感觉那个printf的位置很是让我意外。。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-1-11 12:31:05 | 显示全部楼层
shshsh_0510和winxos该不会都懂日文吧?? {:3_63:}
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-1-11 12:39:01 | 显示全部楼层
这个太牛了!
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 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 1 && j < i) //如果j是i的因子,composite加1 composite += !(wayne 发表于 2010-1-11 11:53
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2010-1-11 13:46:02 | 显示全部楼层
谢谢mathe的注释 我看到了有3个else if头就大了,呵呵
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2010-1-11 16:27:45 | 显示全部楼层
29# wayne 我也看了一下这个程序,本质上仍然是除法,效率不高。 再:正入手学习日语呢。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-12-23 15:01 , Processed in 0.024421 second(s), 14 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表