【题目分析】1不是质数,也不是合数,要划去。第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。2后面第一个没划去的数是3,把3留下,再把3后面所有能被3整除的数都划去。3后面第一个没划去的数是5,把5留下,再把5后面所有能被5整除的 数都划去。这样一直做下去,就会把不超过N的全部合数都筛掉,留下的就是不超过N的全部质数。
【代码实现】
#include <stdio.h>
#define Len 100
int main() {
int a[Len];
int i,j;
for (i = 0; i < Len; i++) { //将数组中的每个元素赋初值
a[i] = i + 1;
}
a[0] = 0; //1本身就不是质数,直接赋值为0
for (i = 0; i < Len-1; i++) //100也不是质数,故直接少一次循环
{
for (j = i + 1; j < Len; j++)
{
if (a[i] != 0 && a[j] != 0) // 用a[j]位置的数字去模i位置之后的所有数据
// 如果能够整除则一定不是素数,该位置数据用0填充
{
if (a[j] % a[i] == 0)
a[j] = 0;
}
}
}
for (i = 0; i < Len-1; i++) {
if (a[i] != 0) //数组中不为0的数即为素数
printf("%d ",a[i]);
}
return 0;
}
标签:++,质数,Len,int,素数,100,整除,法求
From: https://blog.csdn.net/qq_64468018/article/details/143522508