优化这段代码 #include<bits/stdc++.h> using namespace std; int f(int x) { if(x==1) return 0; for(int i=2;i<=sqrt(x);i++) if(x%i==0) return 0; return 1; } int main() { int n,m,k=0; cin>>n>>m; for(int i=n;i<=m;i++) if(f(i)) k++; // 是素数则计数器++ cout<<k;//输出k return 0; }
时间: 2023-12-04 17:02:51 浏览: 156
以下是对该代码的优化:
1. 头文件使用应该精确到所需的头文件,而不是使用 `#include<bits/stdc++.h>` 的方式。
2. 循环判断素数的时候,可以从 2 开始枚举,因为 1 肯定不是素数,所以可以直接排除。
3. 循环判断素数的时候,可以使用 i*i <= x 来代替 i <= sqrt(x),这样可以避免重复计算 sqrt(x)。
4. 判断素数的时候,可以只枚举到 i*i <= x,如果 x 能被 i 整除,则 x/i 也一定能被整除,所以不需要枚举到 sqrt(x),这样可以提高效率。
5. 将求素数的函数 f() 改为返回 bool 类型,可以更加直观地表示是否为素数。
6. 在循环统计素数的时候,可以使用前缀和的方式,避免重复计算。
7. 变量和函数名应该具有一定的语义化。
改进后的代码如下:
```c++
#include <iostream>
#include <cmath>
using namespace std;
bool is_prime(int x) {
if (x < 2) {
return false;
}
for (int i = 2; i * i <= x; i++) {
if (x % i == 0) {
return false;
}
}
return true;
}
int count_primes(int n, int m) {
int count = 0;
for (int i = n; i <= m; i++) {
if (is_prime(i)) {
count++;
}
}
return count;
}
int main() {
int n, m;
cin >> n >> m;
cout << count_primes(n, m) << endl;
return 0;
}
```
这样的代码可以更加高效地统计区间内的素数个数。
阅读全文