在接触c语言初步,我们已经学了用循环方法判断一个数是否为素数,之后可以用循环嵌套求出某范围内的素数
学习函数之后,可以定义一个isPrime函数判断素数,非常方便
学习数组之后,我们可以定义一个元素除了0位和1位(0和1不是素数)全为1的数组,之后从2开始,将每个素数的整数倍所在位置的元素都赋值为0.最后输出值为1的定位。
代码如下
#include<stdio.h>
int main() //思路:将数组中从2开始的素数的倍数均赋值为0,剩下为1的就是素数
{
const int number = 20; //定义数组中元素的个数
int isPrime[number]; //定义数组
isPrime[0]=isPrime[1]=0;
for (int i = 2; i < number; i++) //给每个元素赋值0
{
isPrime[i] = 1;
}
int x=2;
int cnt;
for (x; x < number; x++) //从2开始遍历每一个素数,将他们的倍数在数组中对应的元素变成0
{
if (isPrime[x] == 1) { //如果x在数组中对应的已经是0,就没必要对x再进行倍数化了
for (cnt = 2; x * cnt < number; cnt++) {
isPrime[cnt * x] = 0;
}
}
}
int a;
for (a = 2; a < number; a++)
{
if (isPrime[a] == 1)
{
printf("%d\t", a);
}
}
return 0;
}