推荐答案
测试一下
题目
用C语言统计100~1000里面共有多少个素数,并且把所有素数打印出来。素数又称质数。所谓素数是指除了1和它本身以外,不能被任意整数整除的数. (15分)
参考答案与知识点
参考答案
参考答案:统计100~1000内的素数并打印。C语言实现如下:
```c
#include <stdio.h>
#include <math.h>
int is_prime(int n) {
if (n <= 1) return 0;
if (n == 2) return 1;
if (n % 2 == 0) return 0;
int limit = (int)sqrt(n);
for (int i = 3; i <= limit; i += 2) {
if (n % i == 0) return 0;
}
return 1;
}
int main() {
int count = 0;
printf("100~1000内的素数有:\n");
for (int i = 100; i <= 1000; ++i) {
if (is_prime(i)) {
printf("%d ", i);
count++;
}
}
printf("\n共计%d个素数\n", count);
return 0;
}
```
解析:
1. 素数判断:从2到sqrt(n)试除,若都不能整除则为素数。优化:先排除偶数(除2外),步长改为2,减少一半计算。
2. 边界处理:1和0不是素数,2是素数;100~1000内排除偶数(除2外),因此从100开始,100是偶数直接跳过,但函数中已处理。
3. 循环范围:i从100到1000,逐个判断。使用sqrt函数需包含math.h,编译器可能需链接-lm。
4. 输出:打印每个素数,并统计个数。
5. 易错点:忘记包含头文件、sqrt参数类型转换错误、未处理n<=1、循环条件写成i<n导致效率低、未优化步长导致超时(本题无时限,但面试常考优化)。
6. 考点:素数定义、试除法原理、循环控制、函数封装、数学库使用。
注意:面试时需明确说明算法思想,尤其是只除到sqrt(n)的理由:若n有因子大于sqrt(n),则必有对应因子小于sqrt(n)。
涉及知识点
- IC 基础
- 数字电路
- 设计与验证