level 9
这几天吧内一股不正之风渐涨,想我堂堂男子汉,怎能如此堕落呢?吧内的弟兄们,起来!要求:1.答案一定要正确。一百万以内的所有素数,一个都不能少。2.首先考虑时间复杂度,在时间复杂度相同的情况下,再比较空间复杂度。3.请大家把程序贴出来,我在我的电脑上编译。最终结果以我电脑上的成绩为标准。4.由于tc2.0是16位编译器,在算一百万的时候可能需要不必要的转换。因此希望大家用本吧推荐的编译器来验证程序。5.结果分一二三等奖,得奖人数待定,奖品待定,嘿嘿。6.请大家把程序贴在下面。格式如下:/******************作者:某某某日期:2004-月-日 小时:分钟编译环境:操作系统+编译器(一定要有版本号,比如VC6.0)******************/#include ......int main(){ ...}...
2004年11月18日 04点11分
1
level 9
一百万并不大,不信你写一下,很快就能算完的。当然这个很快不是马上,也许几秒,也许是几十秒,也许有的就是算不出来。嘿嘿。
2004年11月18日 04点11分
3
level 7
#include
#include
#define N 1000000main(){long i,j;int kk;for (i=2;i<=N;i++){kk=0;for (j=2;j<=square(i);j++){if (i%j==0) {kk=1;break;}}if (kk==1) printf("%d ",i);}}
2004年11月18日 04点11分
4
level 9
我之所以给出一百万这个比较大的数,主要原因有两个:1.可以直接看出你的时间复杂度和空间复杂度。2.希望能改掉一些人过分依赖编译器的坏习惯。改程序之前多动动脑筋。这个程序每改动一次,嘿嘿,运行起来就得好几分钟呢。
2004年11月18日 05点11分
5
level 7
求平方根的函数不知道对不对,square(i) assiss不对你改一下。还有我身边没有编译器,不知道对不对。呵呵。
2004年11月18日 05点11分
6
level 9
按我的要求来。唉。不听话。c语言求平方根的函数是sqrt();
2004年11月18日 05点11分
7
level 9
我写了个程序,发现要6分多钟的时间。这是一般思路。希望大家能多想些思路。比如空间换时间。呵呵。只要你的空间复杂度不算太高,时间复杂度足够低,就算好。
2004年11月18日 05点11分
9
level 7
附加要求:用条件编译实现输出到文件。呵呵,顺便更新一下我那素数表,去掉那不愉快的小尾巴,
2004年11月18日 05点11分
10
level 7
#include
#include
#define N 1000000main(){long i,j;FILE *fp;fp=fopen("math","wb");int kk;for (i=2;i<=N;i++){kk=0;for (j=2;j<=sqrt(i);j++){if (i%j==0) {kk=1;break;}}if (kk==1) fprintf(fp,"%d ",i);}}
2004年11月18日 05点11分
11
level 1
我的机器几秒就算好了,而且没使用寄存器变量。一百亿也行,只要你有耐性。
2004年11月18日 07点11分
13
level 9
13:我相信。但请你把程序给出来,不然我只能当你是吹牛。
2004年11月18日 08点11分
14
level 9
倒。我才发现我的程序还残留以前的函数没删掉,6分多钟全是浪费在它们上面。唉。我竟然也能犯这种粗心的错误。更正:一般思路写出来的程序,只需要1秒多的时间。
2004年11月18日 08点11分
15
level 9
eval写的两个程序是错的,好好修改。我改好之后的结果是:4秒多。
2004年11月18日 09点11分
17
level 7
字符数组最长可以多长?你测过么?怎么可以远远大于65535,呵呵,要这么写,只能在数学上想办法了,
2004年11月18日 09点11分
18
level 9
嘿嘿,我一千万都测试成功了,更别说这小小的一百万。65535只是DOS时代16位程序的限制。一百万你知道才多大吗?才1mb,这么小的内存如果都申请不到,干脆跳楼好了。对了,你也得参加。别当上吧主之后和我们搞特殊化了。
2004年11月18日 09点11分
19
level 9
另外,程序本来就是算法和数据结构组成的。特别的是,这题本来就是数学题,呵呵。
2004年11月18日 09点11分
20
level 7
唯一可能超过你的程序(机会)如下:/******************program by:vc992004.11.19Winme+MinGW 2.05******************/ #include
#define N 1000000char s[N+1];int main(int argc,char** argv){ int i=0,n=0; for(i=1;i<=N;i++)s[i]=0; for(n=4;n<=N;n+=2) { s[n]=1; } for(i=3;i<=500000;i+=2) { if(s[i])continue; for(n=i+i;n<=N;n+=i) { s[n]=1; } } for(i=2,n=0;i<=N;i++) { if(s[i]==0) { //printf("%d\n",i);//如果把这个数打印出来,会花很长的时间。为了方便起见,所有的程序我在测试时间时都会把打印这条去掉。 n++; } } printf("%d\n",n); return 0;} -----------哈哈,这么快就......你自己给你自己发奖吧,:)
2004年11月18日 09点11分
21