1、C的数组下标都是从0开始的,而不是从1开始的。然后定义prime[MAX]之后,最后一个元素的下标是MAX-1而不是MAX,prime[MAX]这个元素并不存在。不然定义时应该使用prime[MAX+1]。使用C一族的编程语言一定要适应这个习惯。
2、LZ的prime初始化只初始化了prime[0]一个元素为1,其他元素的初值都是随机值。
将整个 prime 数组初始化成1的方法应该是用循环赋值。
for(i=2; i<=MAX; i++)
prime[i] = 1;
3、筛掉倍数算法的检验截止条件应该是j<=floor(MAX/i)吧。不然筛不干净。然后,因为MAX和i都是整型数,可以直接用 j<=MAX/i 就行了,整型除法运算结果本来就只取整数部分丢弃小数部分。更不具有歧义的方法是用 i*j <= MAX 来。
大哥,for循环里又加for循环,而且还共用变量!!
以上代码想通过修改而完全通过,除非你的脑力够好,不然千万别这么做!切记!
1.这是易吧,不是C吧2.你申明的头文件呢?