欢迎光临
我们一直在努力

c语言怎么求100以内的素数和合数

在C语言中,求100以内的素数可以通过使用循环和条件判断来实现,下面是一个示例代码,用于求解100以内的素数

include <stdio.h>
int main() {
    int i, j, flag;
    printf("100以内的素数有:
");
    for (i = 2; i <= 100; i++) {
        flag = 1; // 初始化标志位为1,表示当前数字可能是素数
        for (j = 2; j <= i / 2; j++) {
            if (i % j == 0) {
                flag = 0; // 如果当前数字能被其他数字整除,则不是素数
                break;
            }
        }
        if (flag == 1) {
            printf("%d ", i); // 如果标志位仍为1,则输出该数字
        }
    }
    return 0;
}

上述代码使用了双重循环来检查每个数字是否为素数,外层循环从2开始,逐个遍历到100,内层循环从2开始,逐个遍历到当前数字的一半(因为一个非素数必然可以表示为两个因数的乘积,其中一个因数不会超过当前数字的一半),在内层循环中,如果当前数字能被其他数字整除,则将标志位设为0,表示不是素数,并跳出内层循环,如果内层循环结束后标志位仍为1,则说明当前数字是素数,将其输出。

通过运行上述代码,可以得到100以内的所有素数,以下是一些示例输出结果:

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

除了上述方法,还可以使用筛选法来求解素数,筛选法的基本思想是从2开始,将每个素数的倍数标记为合数(非素数),然后依次输出未被标记的数字,以下是一个使用筛选法求解100以内素数的示例代码:

include <stdio.h>
include <stdbool.h>
include <string.h>
define N 100 + 1 // 定义数组大小为101(包括0和100)
define M 10 // 定义筛子的大小为10(可以根据需要进行调整)
void sieve(bool isPrime[]) {
    memset(isPrime, true, sizeof(isPrime)); // 初始化数组为true(表示素数)
    isPrime[0] = false; // 0不是素数
    isPrime[1] = false; // 1不是素数
    for (int i = 2; i * i <= N; i++) { // 从2开始,以平方根为边界进行筛选
        if (isPrime[i]) { // 如果当前数字是素数
            for (int j = i * i; j <= N; j += i) { // 将当前素数的倍数标记为合数(非素数)
                isPrime[j] = false;
            }
        }
    }
}
int main() {
    bool isPrime[N]; // 定义一个布尔数组,用于标记每个数字是否为素数
    sieve(isPrime); // 调用筛选函数对数组进行筛选操作
    printf("100以内的素数有:
");
    for (int i = 2; i <= N 1; i++) { // 输出未被标记的数字(即素数)
        if (isPrime[i]) {
            printf("%d ", i);
        }
    }
    return 0;
}

通过运行上述代码,同样可以得到100以内的所有素数,这种方法的时间复杂度较低,适用于求解较大的范围内的素数。

赞(0) 打赏
未经允许不得转载:九八云安全 » c语言怎么求100以内的素数和合数

评论 抢沙发