1.素数生成算法:输出 n 之内的所有素数
利用素数序列判断下一个数是不是素数;(每次加2,保证不是偶数)
代码:
#include<cstdio>
using namespace std;
int primes[105];
int main() {
int n;
scanf("%d", &n);
primes[0] = 2;
primes[1] = 3;
int cnt = 2;
for(int i = 5; i <= n; i += 2) {
int flag = 0;
for(int j = 0; primes[j] * primes[j] <= i; j++) {
if(i % primes[j] == 0) {
flag = 1;
break;
}
}
if(flag == 0) primes[cnt++] = i;
}
for(int i = 0; i < cnt; i++) printf("%d\n", primes[i]);
return 0;
}
2.丑数生成算法:输出第 n 个丑数
注意:
1).不能到第 n 个就停止,可能下一个数比最后一个数小,所以要先判断;
2).指针 it 可以 it--;
,不能it = it - 3;
;
代码:
#include<cstdio>
#include<set>
using namespace std;
set<int> s;
int k[3] = {2, 3, 5};
int main() {
int n;
scanf("%d", &n);
s.insert(1);
int flag = 1;
for(set<int>::iterator it = s.begin(); ; it++) {
for(int i = 0; i < 3; i++) {
set<int>::iterator temp = s.end();
temp--;
if(s.size() >= n) {
if(*it * k[i] < *temp) s.insert(*it * k[i]);
else {
flag = 0;
break;
}
}
else s.insert(*it * k[i]);
}
if(flag == 0) break;
}
set<int>::iterator it = s.end();
it--;
int extra = s.size() - n;
while(extra--) it--;
printf("%d", *it);
return 0;
}