藍橋杯之用篩法求之N內的素數-極度簡化(c++實現)

上文連接:藍橋杯之查找整數-難度:特易(c++實現)
ios


輸入

Nc++

輸出

0~N的素數算法

樣例輸入

100數組

樣例輸出

2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97spa

算法展現

#include<iostream>
using namespace std;
int main()
{
    int nums[100000];//定義最大長度數據nums
    int n;//定義最大區間n
    cin>>n;
    //篩選素數
    for(int i = 2;i<=n/2;i++)//i從2開始查找到n/2結束
    {
        for(int j = 2;(i*j)<=n;j++)//j從2開始查找到i*j=n結束
        {
            nums[i*j]=1;
        }
    }
    //打印1-n之間的素數
    for(int i = 2;i<=n;i++)
    {
        if(nums[i]==0)cout<<i<<"\n";
    }
    return 0;
}

該算法之個人總結

  • 我利用數組的索引表明從1-n間的數,數組索引的值表明該索引是不是素數
  • 篩選素數時,我利用ij,讓i表明從2-n/2的待乘數,j表明待乘數的倍數。若ij=s,則s不是素數,由於s能被i*j表示。
  • 提示注意點1:i*j不要大於n,
  • 提示注意點2:n/i最小值爲2,因此i的最大值爲n/2
相關文章
相關標籤/搜索