/*
质数就是只能被1和自己整除的整数. Eratosthenes筛选法是一种计算质数的有效方法.
这个算法的第一步就是写下所有从2至某个上限之间的所有整数. 在算法的剩余部分, 你遍历整个列表并剔除所有不是质数的整数.
后面的步骤是这样的:
找到表中第一个不被剔除的整数(也就是2), 然后将列表后面所有逢双的数都剔除, 因为它们都可以被2整除, 因此不是质数.
接着, 再回到列表的头部重新开始, 此时列表中尚未被剔除的第一个元素是3, 所有在3之后把每逢第3个数(3的倍数)剔除.
完成这一步之后, 再回到列表开头, 3后面的下一个数是4, 但是它是2的倍数, 已经被剔除了, 所以将其跳过, 轮到5, 将所有5的倍数剔除. 这样以此类推, 反复进行, 最后列表中未被剔除的数均为质数.
编写一个程序, 实现这个算法, 使用数组表示你的列表. 每个数组元素的值用于标记对应的数是否已经被剃除. 开始这个数组所有元素的值都设为TURE, 当算法要求"剔除"其对应的数时, 就把这个元素设置为FALSE.
如果你的程序运行于小于16位的机器上, 小心考虑是否要把某个变量声明为long.
一开始先是用包含1000个元素的数组. 如果你使用字符数组, 使用相同的空间, 你将会比使用整数数组找到更多的质数.
你可以使用下标来表示指向数组首元素和尾元素的指针, 但你应该使用指针来访问数组元素.
注意除了2以外, 所有的偶数都不是质数. 稍微多想一下, 你可以是程序的空间效率大为提高, 方法是数组中的元素只会对应奇数. 这样, 在相同的数组空间内, 你可以寻找到的质数数量大约是原来的两倍.
*/
typedef char bool;
#define true 1
#define false 0
#define SIZE 1000 //注意: SIZE定义的值需满足如下条件: 3 + (SIZE * 2) + 1 < MAX [unsigned int]
#define PRIME_PER_LINE 8
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
//IsPrime对应SIZE个从3开始的奇数. 即IsPrime[i]表示的是: 3 + (i * 2) 这个整数是否为质数
bool *IsPrime = (bool*) malloc
C和指针_编程练习_第6章_第4题
本文介绍了C语言编程中关于指针的第六章练习题目,详细解析了第4题的解题思路和程序运行结果,帮助读者深入理解C语言中的指针操作。
摘要由CSDN通过智能技术生成