题目:来源于洛谷
分析:
我数学不及格,布锅没关系,多做点数学题,锻炼思维(我的解题好像和数学没有太大关系(ง •_•)ง)
首先,我想到的是暴力法,划掉一轮之后,再找下一个素数,接着划掉。因此设置两个for循环,外层找p,内层找 因子含p的数
其次,要用到一串二进制码bitset,bitset< n > name ,n是长度,name是这东西的名字,作用是 将 2到n的数 按照题意划掉
最后需要注意的是,在定义好bitset时,默认的这串二进制码全是0,那么划掉的数就是这串二进制码的下标,而划掉即是 置为1
上代码:
#include <iostream>
#include <cstdio>
#include <bitset>
using namespace std;
bitset<1001> bt;
int main()
{
int n, k, count = 0, flag = 0; //count计数,如果count和k一样,跳出内循环,flag是辅助跳出外循环的
cin >> n >> k;
for (int i = 2; i <= n; ++i) {
for (int j = 2; j <= n; ++j) {
if (j % i == 0) {
if (bt[j]) {
continue;
}
else {
bt[j] = 1;
count++;
}
}
if (count == k) {
flag = j;
break;
}
}
//如果flag为真, 跳出循环
if (flag) {
break;
}
}
cout << flag << endl;
return 0;
}