当前位置:首页C语言 > 正文

C语言:判断素数

作者:野牛程序员:2023-11-03 09:23:21C语言阅读 2723

C语言:判断素数 输入一个正整数m,如果它是素数,输出“YES”,否则,输出“NO”(素数就是只能被1和自身整除的正整数,1不是素数,2是素数)。例:输入1 输出 NO (1不是素数) 输入

2 输出

YES


#include <stdio.h>
#include <math.h>

int main() {
    int flag = 1, i, m;
    scanf("%d", &m);

    if (m <= 1) {
        flag = 0; 
    } else {
        for (i = 2; i <= sqrt(m); i++) {
            if (m % i == 0) {
                flag = 0;
                break;
            }
        }
    }

    if (flag == 1) {
        printf("YES\\n");
    } else {
        printf("NO\\n");
    }

    return 0;
}

在这个循环中,使用 i 从2开始逐个检查可能的因子,来判断输入的整数 m 是否是素数。循环条件 i <= sqrt(m) 中之所以要使用 sqrt(m),是因为这是一个优化技巧,有以下原因:

  1. 优化性能:如果 m 不是素数,那么它必定有一个小于或等于它的因子。这个因子必定是不大于 sqrt(m) 的,因为如果存在一个大于 sqrt(m) 的因子,那么必定会有一个小于 sqrt(m) 的因子。因此,只需要检查小于或等于 sqrt(m) 的数是否能整除 m,而不需要检查大于 sqrt(m) 的数,从而减少了不必要的计算,提高了程序的性能。

  2. 减少计算量:如果 m 不是素数,那么它必定可以分解成两个小于或等于 sqrt(m) 的整数的乘积。在循环中,我们逐个检查 i 是否能整除 m,如果 i 太大,它的相对应的因子就会太小,在循环中重复检查这些小因子是不必要的。只需要检查小于或等于 sqrt(m)i 值就足够了。

因此,通过限制循环条件为 i <= sqrt(m),可以有效地减少循环迭代的次数,提高程序效率。这是一种常见的素数检查优化方法,可以节省计算时间。


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击