回复 12楼 doofymark
呵呵,这是我的一个同学在我教了他这个算法之后写的。
算法是把所有素数的倍数从数组里删去。
数组开始的时候里面全是0,然后 i = 2 是素数。j = 2 * i 是 4,4 的地方被标记成 1,就是合数。之后 j += i,就是让 j 一直取 2i, 3i, 4i, .... 这些都是 i 的倍数,因此是合数。然后 i 往后找第一个是 0 的值,因为这个值不是比它小的所有素数的倍数,因此也是素数,然后 j 再把这个数的倍数划去。最后表里是 0 的数,就是素数。打印出来就行了。
刚才看才发现,他申请完内存之后都没试试是不是成功就用了那块内存。这不是个好习惯,大家可以在 calloc 的下一行加一个
if (!flag) { ...... }
访照文件打开下面的語句处理一下。