关于素数及求和总结

这篇博客介绍了如何判断一个数是否为素数,并提供了C语言的实现代码。内容包括从2开始的循环判断,优化到只检查到数的一半,以及使用开关变量来确定是否为素数。此外,还展示了如何计算指定范围内所有素数的和,通过双重循环实现。
摘要由CSDN通过智能技术生成

判断输入是否为素数

素数为除了一和自己本身之外没有能够整除它的数,1不是素数
重点:

  1. 判断素数从2开始,for(i=2
  2. 判断一半即可i<=n/2;注意4,所以还要有等于
  3. 素数求和时,外循环内要使button=1;即变回1
  4. 求和,必然在循环内相加得sum值,输出语句在循环外
int main()
{
        int n,i;
        scanf("%d",&n);
        //i必须由2开始,1是不能作为循环判断的起始值的,不然都不是素数了,由2开始循环
        for(i=2;i<=n/2;i++)//素数判定,就是用每个比n小的数去整除n,如果出现可以整除的那必然不是咯
        {
                if(n%i==0)
                {
                        printf("不是素数");
                        break;
                }
        }
        //是素数的判断条件为循环走完了,没有出现任何一个数能整除他
        printf("是素数");//很显然不合理,因为循环无论如何都会走到最后,终究会通过这个整除判断输出“是素数”
    return 0;
}

在这里插入图片描述
在这里插入图片描述
因此判断素数必须要引用需要引入“开关”作为判断依据(理解为通过1和0去做判断)

int main()
{
        int n,i;
        int button=1;//素数必然要设置一个开关,通过开关去判断输出是否为
        scanf("%d",&n);
        //这里用n/2即可,因为整除了前一半即可知他是否为素数了,无需全部整除一遍,一半位置之后的有倍数2了。
        for(i=2;i<=n/2;i++)
        //注意一定是小于等于,当i为4时,判断2<2时,跳出循环。4不是素数,若写成小于则开关为1意味着4被当成了素数
        {
                if(n%i==0)
                {
                        button=0;
                        break;//直接跳出for循环,比如6仅需判断2就可知不是素,无需判断到3
                }
        }
        if(button==1)//无法被证伪,因此为真
        {
                printf("%d是素数",n);
        }
        else
                printf("%d不是素数",n);
    return 0;
}

输入大于3的数,求3~n之间所有素数和。

int main()
{
        int n,i,a;
        int sum=0;
        scanf("%d",&n);
        int button;
        //因为是要求和
        for(a=3;a<n;a++)//有个外循环让他从3走到n,因为每个数都要判断一遍嘛
        {
                button=1;//这里要让button回归为1,因为在下面if中button的值变为了0,若不重新赋值,始终为0
                for(i=2;i<=a/2;i++)//内循环是对外循环来的数去做素数判定,由2开始判
                {
                        if(a%i==0)
                        {
                                button=0;
                                break;
                        }
                }
                if(button==1)
                        {
                                sum+=a;
                        }
        }

        printf("所有素数求和为%d",sum);
    return 0;
}

输入任意两数m和n,求m~n内所有素数的和

//输入任意两数m和n,求m~n内所有素数的和

int main()
{
        int m,n,i,a;
        int sum=0;
        int cnt=0;
        scanf("%d %d",&m,&n);
        int button;
        //1不是素数,故当你输入1开始时,我令他变为从2开始
        if(m==1){
                m=2;
        }
        for(a=m;a<n;a++)//有个外循环让他从m走到n,因为每个数都要判断一遍
        {
                button=1;//这里要让button回归为1,因为在下面if中button的值变为了0,若不重新赋值,始终为0
                for(i=2;i<=a/2;i++)//内循环是对外循环来的数去做素数判定,由2开始判
                {
                        if(a%i==0)
                        {
                                button=0;
                                break;
                        }
                }
                if(button==1)
                        {
                                cnt++;
                                sum+=a;
                        }
        }

        printf("%d个素数,所有素数求和为%d",cnt,sum);
    return 0;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值