/*
修改前一题的Eratosthenes程序, 使用位数组而不是字符数组, 这里要用到第5章编程练习中所开发的位数组函数.
这个修改使程序的空间效率进一步提高, 不过代价是时间效率的降低. 在你的系统中, 使用这个方法, 你所能找到的最大质数是多少?
*/
#define MAX_NUMBER 1000 //检测范围: [0, MAX_NUMBER]
#define PRIME_PER_LINE 8 //每行显示质数个数
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
// "( MAX_NUMBER - 3 ) / ( 2 * 8 ) + 1"表示位数组IsPrime要表示[3, MAX_NUMBER]这个范围所有的奇数需要的内存空间:
// "3"表示申请的数组第一个元素代表的是奇数3, "2 * 8"表示数组只存放奇数, 且只用一比特位来表示数组中这个元素代表的奇数是否是质数,
// 最后再加1是因为整数的除法会舍弃余数
char *const IsPrime = (char*) malloc( sizeof( char ) * ( MAX_NUMBER - 3 ) / ( 2 * 8 ) + 1 );
if( IsPrime == NULL )
{
C和指针_编程练习_第6章_第5题
最新推荐文章于 2022-09-12 13:34:42 发布