输入
N
输出
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
97
算法展示
#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