题目:判断101 - 200之间有多少个素数,并输出所有素数。
解法一:程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。
#include <stdio.h>
#include <math.h>
#include <stdbool.h>
bool is_prime(int num) {
// 0, 1 不是素数
if (num <= 1) {
return false;
}
// 只需要检查到sqrt(num)即可
for (int i = 2; i <= (int)sqrt(num); i++) {
if (num % i == 0) {
// 如果能被整除,则不是素数
return false;
}
}
// 如果没有找到能整除的数,则是素数
return true;
}
int main() {
int num;
printf("请输入一个整数: ");
scanf("%d", &num);
if (is_prime(num)) {
printf("%d 是素数\n", num);
} else {
printf("%d 不是素数\n", num);
}
return 0;
}
解法二:
#include <stdio.h>
#include <stdbool.h>
bool isPrime(int num) {
// 如果数字小于等于1,它不是素数
if (num <= 1) return false;
// 2是最小的素数
if (num == 2) return true;
// 如果数字是偶数(除了2),它不是素数
if (num % 2 == 0) return false;
// 检查从3开始的所有奇数是否是num的因子
for (int i = 3; i * i <= num; i += 2) {
if (num % i == 0)
return false; // 如果找到一个因子,则num不是素数
}
return true; // 如果没有找到任何因子,则num是素数
}
int main() {
int count = 0;
printf("素数(Prime numbers)在101到200之间:\n");
for (int i = 101; i <= 200; i++) {
if (isPrime(i)) {
printf("%d ", i);
count++;
}
}
printf("\n共有 %d 个素数\n", count);
return 0;
}