帮我优化程序n=10^5会爆栈#includebitsstdc++husing namespace std;int n=0m=0a100001b100001sbbsiiidnm=0nmd=0;int main cinn; fori=1;i=n;i++ cinsbbs; ifsb==1 sb++; forii=sb;ii=bs;ii++ ifbi
你可以通过以下方式优化程序:
- 使用bool数组代替int数组:因为你只需要判断某个数是否被标记为非素数,所以可以使用bool数组代替int数组,减少内存消耗。
- 使用筛法求素数:使用筛法可以更高效地找到素数,而不是对每个数都进行试除法判断。
- 将素数判断的逻辑提取为函数:将判断一个数是否为素数的逻辑提取为一个函数,提高代码的可读性和复用性。
- 减少不必要的判断和计算:在循环中,可以通过判断sb是否小于等于2来减少不必要的计算。
下面是优化后的代码:
#include <iostream>
#include <vector>
using namespace std;
bool isPrime(int num) {
if (num < 2) return false;
if (num == 2) return true;
if (num % 2 == 0) return false;
for (int i = 3; i * i <= num; i += 2) {
if (num % i == 0) return false;
}
return true;
}
int main() {
int n;
cin >> n;
vector<bool> isComposite(100001, false);
for (int i = 0; i < n; i++) {
int sb, bs;
cin >> sb >> bs;
if (sb <= 2) sb = 3;
int count = 0;
for (int j = sb; j <= bs; j++) {
if (isComposite[j]) {
count++;
} else if (!isPrime(j)) {
isComposite[j] = true;
count++;
}
}
cout << count << endl;
}
return 0;
}
这样优化后的程序不会因为n=10^5导致栈溢出
原文地址: https://www.cveoy.top/t/topic/h2Ul 著作权归作者所有。请勿转载和采集!