目的
为什么会写这个,是因为今天的计算机老师出了一道题目,用C语言求出100以内的素数于是乎笔者就开始探索了起来
输出结果
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
前言
素数是计算机科学和数学中非常重要的概念,它的应用范围从密码学到算法设计。本篇博文将通过一段简单的C代码来展示如何找到一定范围内的所有素数。
一、C语言代码详解(简单)
代码:
#include<stdio.h>
void main()
{
int i, j, PN;
for (i = 2; i <= 100; i++)
{
PN = 0;
for (j = 2; j < i; j++)
{
if (i % j == 0)
{
PN = 1;
break;
}
}
if (PN == 0)
{
printf("%d\n", i);
}
}
}
代码解读
1.初始化变量:
int i, j, PN;
- i:用于遍历从2到100的每一个数。
- j:用于检查当前数 i 是否为素数。
- PN:标识当前数是否为素数,非素数为1,素数为0。
2.循环
(1). 外层循环:
for (i = 2; i <= 100; i++)
遍历从2到100的所有整数。
(2). 内层循环:
for (j = 2; j < i; j++)
{
if (i % j == 0)
{
PN = 1;
break;
}
}
检查 i 是否能被比它小的任意数 j 整除。
如果 i % j == 0,则 i 不是素数,设置 PN 为1,并终止检查。
3. 判断并输出素数
if (PN == 0)
{
printf("%d\n", i);
}
若 PN 保持为0,表明 i 不能被任何比它小的数整除,因此是素数,于是打印输出。
二、C语言代码解读(进阶)
代码
#include <stdio.h>
#include <math.h>
void main()
{
int i, j, PN;
for (i = 2; i <= 100; i++)
{
PN = 0;
for (j = 2; j <= sqrt(i); j++)
{
if (i % j == 0)
{
PN = 1;
break;
}
}
if (PN == 0)
{
printf("%d\n", i);
}
}
}
1.代码根据
如果一个数 i 不是素数,它至少有一个小于或等于其平方根的因子。
2. 解读
之前的内循环条件是 j < i,现在更改为 j <= sqrt(i)。这是因为,如果 i 不是素数,它的最小因数肯定小于等于 sqrt(i)。