优化代码#include <stdio.h> int main () { int n,count=0,x=0,i=1; scanf("%d",&n); while(count<n) { i++; for(int j=1;j<=i;j++) { if(i%j==0) { x++; } } if(x==2) { count++; if(count==n) { printf("%d",i); break; } } x=0; } return 0; }
时间: 2023-12-05 21:06:27 浏览: 161
为了优化你的代码,我们可以使用一个数组来记录质数,而不是每次都去判断一个数是否为质数。这样可以减少重复的计算。
下面是优化后的代码:
```c
#include <stdio.h>
#define MAX_SIZE 1000000
int main() {
int n, count = 0;
int primes[MAX_SIZE] = {0}; // 用来记录质数
scanf("%d", &n);
for (int i = 2; count < n; i++) {
if (primes[i] == 0) {
// i 是质数
count++;
if (count == n) {
printf("%d", i);
break;
}
// 标记 i 的倍数为非质数
for (int j = i * 2; j < MAX_SIZE; j += i) {
primes[j] = 1;
}
}
}
return 0;
}
```
这个优化的方法叫做埃拉托斯特尼筛法,可以更快地找到指定数量的质数。我们使用一个数组 `primes` 来记录质数,初始时都设为 0。当找到一个质数 `i` 时,我们将它的倍数都标记为非质数。
这样,在循环过程中只需要判断 `primes[i]` 是否为 0,而不需要每次都进行质数判断,大大减少了计算量。
另外,为了处理较大的输入值,我们定义了一个足够大的数组 `primes`,你可以根据需要调整 `MAX_SIZE` 的大小。
阅读全文