第二题
求2000以内的所有素数
思路:诶氏筛法
注:
<1>只需要从2开始即可。
<2>如果需要对素数进行操作,或者获取某个小区间的所有素数,那么预处理操作一定是先使用本算法,把一个大范围内的所有素数先都求出来,然后再干别的。
代码
#include <string>
#include <stack>
#include <queue>
#include <unordered_map>
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
bool isPrime[2001];
int primeNumber[2001];
int n = 0;
void getPrimNum() {
for (int i = 2; i < 2001; i++) {//第一个素数是2,所以一切从二起步,先初始化,都为true
isPrime[i] = true;
}
for (int i = 2; i <= 2000; i++) {
if (isPrime[i]) {//只要我在数组最左侧遇到了true的元素,一定是素数
primeNumber[n++] = i;
for (int j = i * 2; j <= 2000; j += i) {//每次把i的所有倍数划去,从2*i开始,一直到所求区间末尾
isPrime[j] = false;
}
}
}
cout << n << endl;
for (int i = 0; i < n; i++) {
cout << primeNumber[i] << ' ';
}
}
int main()
{
//第二题
getPrimNum();
return 0;
}
第七题
判定有向图里面是否存在有向回路。
思路
用拓扑排序即可,代码见板子集合: