把以下代码转化为c++代码def nthPrime(n: int, k: int) -> int: if k == 1: return 2 isPrime = [True] * (n+1) primes = [2] for i in range(3, int(n**0.5)+1, 2): if isPrime[i]: primes.append(i) if len(primes) == k: return primes[k-1] for j in range(i*i, n+1, i*2): isPrime[j] = False for i in range(primes[-1]+2, n+1, 2): if isPrime[i]: primes.append(i) if len(primes) == k: return primes[k-1] return -1 # 如果没有找到第k个素数,则返回-1
时间: 2024-01-21 17:04:30 浏览: 156
pybind11: C++ 工程提供 Python 接口的实例代码
以下是Python代码对应的C++代码:
```
#include <vector>
#include <cmath>
using namespace std;
int nthPrime(int n, int k) {
if (k == 1) {
return 2;
}
vector<bool> isPrime(n+1, true);
vector<int> primes {2};
for (int i = 3; i <= sqrt(n); i += 2) {
if (isPrime[i]) {
primes.push_back(i);
if (primes.size() == k) {
return primes[k-1];
}
for (int j = i*i; j <= n; j += i*2) {
isPrime[j] = false;
}
}
}
for (int i = primes.back()+2; i <= n; i += 2) {
if (isPrime[i]) {
primes.push_back(i);
if (primes.size() == k) {
return primes[k-1];
}
}
}
return -1; // 如果没有找到第k个素数,则返回-1
}
```
需要注意的是,在C++中需要包含cmath头文件来使用sqrt函数,另外C++中的vector使用方式与Python中的列表有所不同。
阅读全文