【8.1】通过筛选法找出100以内的素数。
提示:所谓筛选法,即先将2到100按顺序存放到数组中,然后从2开始,依次以其为除数去除数组中之后的所有数,若能整除,则被除数必然不是素数,就进行标记,比如赋值为0。最终剩余的数即为素数。
#include <stdio.h>
int main()
{
int a[100],i,j;
a[0] = 0;
for(i=1;i<100;i++)
a[i] = i+1;
for(i=2;i<100;i++)
{
if(a[i] == 0)
continue;
for(j=i+1;j<100;j++)
if(a[j]%a[i] == 0)
a[j] = 0;
}
for(i=1;i<100;i++)
if(a[i] != 0)
printf("%d ",a[i]);
}
好的,让我来回答这个问题。
首先,我们需要一个数组来存放2到100之间的所有数字。然后,我们可以使用一个循环来遍历这个数组,从2开始,依次以其为除数去除数组中之后的所有数,如果能整除,则被除数必然不是素数,就进行标记。
以下是一个示例代码:
#include <stdio.h>
int main()
{
int nums[99];
int i, j;
// 初始化数组
for(i = 0; i < 99; i++)
{
nums[i] = i + 2;
}
// 筛选素数
for(i = 0; i < 99; i++)
{
if(nums[i] != 0)
{
for(j = i + 1; j < 99; j++)
{
if(nums[j] % nums[i] == 0)
{
nums[j] = 0;
}
}
}
}
// 输出素数
printf("The prime numbers between 2 and 100 are:\n");
for(i = 0; i < 99; i++)
{
if(nums[i] != 0)
{
printf("%d ", nums[i]);
}
}
return 0;
}
输出结果为:
The prime numbers between 2 and 100 are:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
这个代码使用了两个循环,第一个循环用来初始化数组,第二个循环用来筛选素数。在第二个循环中,我们使用了一个判断语句来判断当前数字是否为素数,如果是素数,就使用另一个循环来将其倍数标记为非素数。
希望这个解答可以帮助到你。