ふるい法を使用して n 内の素数を見つけます

1. トピックの紹介

説明を入力してください:

複数の入力セットの場合、各行には正の整数 (100 以下) が入力されます。

出力の説明:

各行の整数 n の入力に対して、2 行を出力します。最初の行は、スペースで区切られた n (n を含む) 内の素数を出力します。2 行目は、配列内の 0 にクリアされた 2 の数を出力します

出力の各行の後の改行

2. スクリーニング方法

スクリーニング法の解決プロセスは次のとおりです。 2 と n の間の正の整数を配列に格納し、配列内の 2 以降の 2 で割り切れるすべての数値をクリアし、次に 3 0 以降の 3 で割り切れるすべての数値をクリアします。 nまでオン。

配列内の 0 以外の数値は素数です。

3. 分析

まず、配列を作成し、1 から n までの整数を配列に配置します。

次に、スクリーニング メソッドのメカニズムを使用して、2 以降の 2 で割り切れるすべての数値をクリアします。ここでは、for の二重ネストを使用する必要があります。

これは、arr[1] を arr[2] ~arr[n] のすべての値でモジュロする必要があることを意味します。モジュラスが 0 に等しい場合は、このモジュロ arr[1] の値を 0 に設定します。

4. コードのデモ

#include <stdio.h>

int main() 
{
    int n =0;
    int count =0;
    int arr[1000];
    while(scanf("%d",&n)!=EOF)//多组输入
    {
        
        for(int i =0;i<n;i++)
        {
            arr[i]=i+1;//arr[0]内存储数字1
        }
        arr[0]=0;//把你的1拿出来不然会出错!因为任何数除去1都是整除的
        for(int i =1;i<n;i++)
        {
            if(arr[i]==0)
            {
                continue;
            }
            for(int j =i+1;j<n;j++)
    //数组中2之后的所有能被2整除的数清0,再把3之后的所有能被3整除的数字清0
            {
                if(arr[j]!=0)
                {
                    if(arr[j]%arr[i]==0)
                    {
                        arr[j]=0;
                        count++;

                    }
                }
            }
        }
        for(int i=0;i<n;i++)
        {
            if(arr[i]!=0)
            {
                printf("%d ",arr[i]);
            }
        }
        printf("\n");
        printf("%d",count);

    }
    return 0;
}

おすすめ

転載: blog.csdn.net/2301_76445610/article/details/132216809