C语言的素数的全家桶

本文整理了C语言中判断素数的多种方法,包括无优化的判断、优化后的判断以及欧拉筛和埃氏筛优化等高效算法,旨在帮助读者理解和优化素数筛选的过程。
摘要由CSDN通过智能技术生成

整理了素数的判断筛选的一些方法,建议留出时间肝一下。

首先由简入难,思考一下如何判断一个数是不是素数?

最简单最暴力的方法就是定义法了,即根据素数的定义(除1以外的数,只能被1和它本身整除),通过循环,判断2到这个数之间有没有可以被这个数整除的数,有就不是素数,没有就是素数。

无优化:

理解简单代码也简单:

#include<stdio.h>
int ssf1(int n)//判断n是否为素数,是返回1,不是返回0
{
    int j;
    for(j=2;j<n;j++)
        if(n%j==0)
        return 0;
    return 1;
}
int main()
{
    int n;
    scanf("%d",&n);
    if(ssf1(n))
       printf("YES\n");
    else
       printf("NO\n");
    return 0;
}

优化1:

那么把这个简单暴力的方法优化一下,优化前首先要了解一个事情,就是对于任何一个正整数n,都可以写成√(n-x)*√(n-x)的形式,ok,我们在上面那个方法中判断n是否是素数时,是将2到n-1之间的整数每一个都要判断一遍,直到中途结束或最终结束,现在我们就只需要判断2到√n之间的整数就可以,为什么?首先为什么不判断√n以后的数了,因为因为如果2到√n之间有一个整数数能被n整除,n就不是素数,而如果2到√n之间没有一个整数能被n整除,那么√n之后的也不会被n整除,思考一下。

理解好了,代码也就出来了:

#include<stdio.h>
int ssf2(int n)//是素数返回1,不是返回0
{
    int j;
    for(j=2;j*j<=n;j++)
        if(n%j==0)
        return 0;
    return 1;
}
int main()
{
    int n;
    scanf("%d",&n);
    if(ssf2(n))
       printf("YES\n");
    else
       printf("NO\n");
    return 0;
}

优化2:

ok,这样已经好多了,但是还可以再优化优化,也是优化前先了解个事情,那就是除了2和3以外的素数,其他的素数一定位于6的倍数两侧,但位于6的倍数两侧的数不一定是素数。

需要看证明的看一下,不需要的就可以想一下如何优化代码了:                                               设 x>=1,可以把6个相连整数表示为6x-1,6x,6x+1,6x+2,6x+3,6x+4,6x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浪漫收藏猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值