你可以通过以下方式优化程序:

  1. 使用bool数组代替int数组:因为你只需要判断某个数是否被标记为非素数,所以可以使用bool数组代替int数组,减少内存消耗。
  2. 使用筛法求素数:使用筛法可以更高效地找到素数,而不是对每个数都进行试除法判断。
  3. 将素数判断的逻辑提取为函数:将判断一个数是否为素数的逻辑提取为一个函数,提高代码的可读性和复用性。
  4. 减少不必要的判断和计算:在循环中,可以通过判断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导致栈溢出

帮我优化程序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

原文地址: https://www.cveoy.top/t/topic/h2Ul 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录