首先,我们需要知道什么是素数。素数就是 只能 被 1 和 它本身 整除的数字。
方法一:用100到200之间的每一个数字分别除以2到这个数本身减 1 的那一个数字,如果此过程中出现整除的现象,则该数不是素数,如果没有整除的现象,则该数为素数,输出。
代码实现如下:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i = 0;
int j = 0;
int count = 0; // 计数
for (i = 100; i <= 200; i++){
for (j = 2; j <= i; j++){
if (i % j == 0) {
break;
}
}
// 当 j == i 的时候,说明小于 i 的所有整数都不能被 i 整除,即:i 是素数
if (j == i) {
printf("%d ", i); // 打印素数
count++; // 统计 100-200 之间素数的个数
}
}
printf("\ncount = %d\n", count);
system("pause");
return 0;
}
方法二: 使用 sqrt 函数对 方法一 进行优化。sqrt 函数就是平方根,非素数可以写成除了1和他本身的a*b方式,而a、b之间必有一个小于等于ab之积的开平方根。
代码实现如下:
#include<stdio.h>
#include<math.h>
int main()
{
int i = 0;
int count = 0;
for (i = 100; i <= 200; i++)
{
int j = 0;
// 这里引用了 sqrt 函数,它是一个库函数,所以需要包含头文件<matn.h>
for (j = 2; j <= sqrt(i); j++)
{
// 只要整除,就一定不是素数,break 跳出该循环
if (i % j == 0)
{
break;
}
}
// j > sqrt(i) 时仍未整除,则这个 i 是素数
if (j > sqrt(i))
{
count++;
printf("%d ", i);
}
}
printf("\ncount = %d\n", count);
system("pause");
return 0;
}
执行结果
方法三:我么知道偶数一定不是素数,所以对于 方法二 我们可以进一步优化,即:只判断奇数,偶数全部跳过。
代码实现如下:
#include<stdio.h>
#include<math.h>
int main()
{
int i = 0;
int count = 0;
// 这里 i += 2 ,相当于 i = i + 2;即:跳过偶数,只判断计数
for(i = 101; i <= 200; i += 2)
{
int j = 0;
for (j = 2; j <= sqrt(i); j++)
{
if (i % j == 0)
{
break;
}
}
if (j > sqrt(i))
{
count++;
printf("%d ", i);
}
}
printf("\ncount = %d\n", count);
system("pause");
return 0;
}
执行结果
方法四:用函数实现
代码:
#include<stdio.h>
#include<stdlib.h>
// 定义函数
int is_prime(int n)
{
int j = 0;
for (j = 2; j < n; j++) {
if (n % j == 0) {
return 0;
}
if(j == n){
return 1;
}
}
}
int main()
{
int count = 0;
int i = 0;
for (i = 100; i <= 200; i++) {
// 函数调用
// is_primt(i) 表示如果 i 是素数
if (is_prime(i)) {
printf("%d ", i);
count++;
}
}
printf("\ncount = %d\n", count);
system("pause");
return 0;
}
执行结果