判断一个数是否为素数的程序改进

其实n不必被2~(n- 1)范围内的各整数去除,只须将n被2~n/2间的整数除即可,甚至只须被2~√n
之间的整数除即可。例如,判断17是否素数,只须将17被2, 3和4除即可,如都除不尽,n必为素
数。这样做可以大大减少循环次数,提高执行效率。为方便,可以定义一个整型变量k(其值为√n的整数部分); 如果n不能被2~k(即√n)之间的任一整数整除,则在完成最后一次循环后,i还要加1,因此i = k + 1, 然后才终止循环。在循环之后判别i的值是否大于或等于k + 1, 若是,则表明未曾被2~k之间任一整数整除过,因此输出“是素数”。

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

int main()
{
    int n, i,k;
    printf("请输入一个整数:\n");
    scanf_s("%d", &n);
    k = sqrt(n);
    for (i = 2; i <= k; i++)
    if (n%i == 0)
        break;
    if (i <= k)
        printf("这不是素数\n");
    else
        printf("这是素数\n");
    return 0;
}

算法如图:
这里写图片描述

程序改进参考 《C程序设计(第四版)》 谭浩强 著

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值