字数统计:0
阅读时间:0 分钟
Toni·Wang
Toni·Wang
发布于 2025-03-27 / 3 阅读
0
0

探索素数:通过C语言代码生成100以内的素数

目的

为什么会写这个,是因为今天的计算机老师出了一道题目,用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)。


评论