为什么这个代码对大数字不起作用? 本贾尼·斯特劳斯特卢普编程原理和实践中,我用C++做了4.11题。 创建一个程序,使用素数向量按顺序(素数[2,3,5,…])查找从1到max范围内的所有素数。以下是我的解决方案: #include <iostream> #include <string> #include <vector> #include <bits/stdc++.h> using namespace std; bool check_prime(vector<int> &prime, int n) { int count = 0; for (int i = 0; prime[i] <= n || i <= prime.size() - 1; ++i) { if (n % prime[i] == 0) { count++; break; } } bool result = 0; if (count == 0) result = 1; else result = 0; return result; } int main() { vector<int> prime{2}; int max; cout << "Please enter a max value:"; cin >> max; for (int i = 2; i <= max; ++i) { if (check_prime(prime, i)) prime.push_back(i); } for (int i = 0; i <= prime.size() - 1; ++i) { cout << prime[i]; if (i <= prime.size() - 2) cout << ','; } } #包括 #包括 #包括 #包括 使用名称空间std; 布尔校验素数(向量和素数,整数n){ 整数计数=0; 对于(inti=0;prime[i]

为什么这个代码对大数字不起作用? 本贾尼·斯特劳斯特卢普编程原理和实践中,我用C++做了4.11题。 创建一个程序,使用素数向量按顺序(素数[2,3,5,…])查找从1到max范围内的所有素数。以下是我的解决方案: #include <iostream> #include <string> #include <vector> #include <bits/stdc++.h> using namespace std; bool check_prime(vector<int> &prime, int n) { int count = 0; for (int i = 0; prime[i] <= n || i <= prime.size() - 1; ++i) { if (n % prime[i] == 0) { count++; break; } } bool result = 0; if (count == 0) result = 1; else result = 0; return result; } int main() { vector<int> prime{2}; int max; cout << "Please enter a max value:"; cin >> max; for (int i = 2; i <= max; ++i) { if (check_prime(prime, i)) prime.push_back(i); } for (int i = 0; i <= prime.size() - 1; ++i) { cout << prime[i]; if (i <= prime.size() - 2) cout << ','; } } #包括 #包括 #包括 #包括 使用名称空间std; 布尔校验素数(向量和素数,整数n){ 整数计数=0; 对于(inti=0;prime[i],c++,C++,您可以检查prime[i]此条件 prime[i]<=n||i<=prime.size()-1 哪个写得更地道 i < prime.size() && prime[i] <= n i

您可以检查
prime[i]此条件

prime[i]<=n||i<=prime.size()-1
哪个写得更地道

i < prime.size() && prime[i] <= n 

i名称空间std;
#include
?我可以原谅他,但不能原谅后者。这与问题无关,但你很难理解如何编写“返回计数==0”谢谢。我看了半个小时,没有注意到我用了| |而不是&。不知何故,它适用于小最大值,这让我非常困惑。
i < prime.size() && prime[i] <= n