用筛选法找出10以内的素数

【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]);
}

以下内容部分参考ChatGPT模型:


好的,让我来回答这个问题。

首先,我们需要一个数组来存放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

这个代码使用了两个循环,第一个循环用来初始化数组,第二个循环用来筛选素数。在第二个循环中,我们使用了一个判断语句来判断当前数字是否为素数,如果是素数,就使用另一个循环来将其倍数标记为非素数。

希望这个解答可以帮助到你。


如果我的建议对您有帮助、请点击采纳、祝您生活愉快