不用函数优化这段代码#include<bits/stdc++.h> using namespace std; bool f[1000000001]={0}; int main () { int x,y,a,b,s=0; cin>>a>>b; for(x=2;x<=sqrt(b);x++) { if(f[x]==0) { for(y=x;x*y<=b;y++) { f[x*y]=1; } } } for(x=a;x<b;x++) { if(f[x]==0) { s++; } } cout<<(s); return 0; }
时间: 2024-04-14 21:27:50 浏览: 67
优化这段代码的方法有很多,下面给出一种优化方案:
1. 不要使用 `#include<bits/stdc++.h>` 这样的全局包含头文件,应该根据具体需要包含相应的头文件,这样可以减少编译时间和内存使用。
2. 将 `bool f[1000000001]={0};` 修改为 `vector<bool> f(b+1, false);`,因为数组大小为 1000000001 可能会导致栈溢出,而使用 `vector` 可以避免这个问题。
3. 将 `sqrt(b)` 的计算结果存储在一个变量中,避免在循环中重复计算。
4. 将内层循环 `for(y=x;x*y<=b;y++)` 修改为从 `x*x` 开始,步长为 `x`,避免重复计算。
5. 将第二个循环中的条件 `x<b` 修改为 `x<=b`,这样可以包含边界值。
6. 将遍历的起始点 `x=a` 修改为 `x=max(a, 2)`,这样可以避免重复计算小于 `a` 的值。
7. 不要使用 `using namespace std;`,而是显式地指定命名空间。
优化后的代码如下:
```cpp
#include <iostream>
#include <vector>
#include <cmath>
using std::cin;
using std::cout;
using std::vector;
int main()
{
int a, b, s = 0;
cin >> a >> b;
vector<bool> f(b + 1, false);
int sqrt_b = sqrt(b);
for (int x = 2; x <= sqrt_b; x++)
{
if (!f[x])
{
for (int y = x * x; y <= b; y += x)
{
f[y] = true;
}
}
}
for (int x = std::max(a, 2); x <= b; x++)
{
if (!f[x])
{
s++;
}
}
cout << s;
return 0;
}
```
这样的优化可以提高代码的执行效率。
阅读全文