#include <algorithm>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
typedef long long ll;
const int maxn = 1e8;
const int inf = 0x3f3f3f3f;
int n, m;
int prime[maxn], top = 0;
bool not_prime[maxn];
int main() {
scanf("%d %d", &n, &m);
memset(not_prime, 0, sizeof(not_prime));
not_prime[0] = not_prime[1] = 1;
for (int i = 2; i <= n; ++i) {
if (!not_prime[i])
prime[++top] = i;
for (int j = 1; j <= top && i * prime[j] <= n; ++j) {
not_prime[i * prime[j]] = 1;
if (!(i % prime[j]))
break;
}
}
for (int i = 1; i <= m; ++i) {
int x;
scanf("%d", &x);
printf("%d\n", prime[x]);
}
return 0;
}
我使用的是其他人整合到llvm-12版本的ollvm,测试代码是我很久以前写的一个素数筛模板
使用
clang++ test.cpp -mllvm -bcf -o bogusCFG
编译出混淆过的程序,用IDA看的话是这样的但是直接使用脚本反混淆的话,会将很多原本的代码也nop掉
因为我是刚入门不太懂,请问一下这是符号执行对基本块判断的问题吗,还是其他的原因,麻烦了。