素数(判断,统计,范围输出)

目录:

  1. 判断一个素数
  2. 统计素数个数
  3. 输出范围素数
一、判断一个素数

素数
只有1和本身两个因数,又称质数
注意:1不是素数,2是素数
合数
除1和它本身外,还有其它的因数。
问题:
输入一个大于3的整数n,判断它是否为素数(prime,又称质数)。

采用算法:
第一种:n % i( i 取值 2~n-1

第二种:n % i( i 取值 2~n/2
原因:n的最大因数 小于或等于 n/2

第三种:n % i( i 取值 2~根号n
原因:n的每一对因子,必然有一个小于根号n,另一个大于根号n

程序1…………i<根号n………………

#include<stdio.h>
#include<math.h>             //引用平方根sqrt 
int main()
{
    int n,k,i;
    printf("请输入一个大于3的整数:");
    scanf("%d",&n);
    k=sqrt(n);              //求n的平方根 
    for(i=2;i<=k;i++)
        if(n%i==0) break;
    if(i<k+1)          //括号内可以写成i<=k,但不能写成i<k (当n=6、8、9等时结果不对)
        printf("%d不是一个素数\n",n);
    else
        printf("%d是一个素数\n",n);
    return 0; 
}

运行结果…………………………
在这里插入图片描述
程序2…………2~n-1……………………

#include<stdio.h>
int main()
{
    int n,k,i;
    printf("请输入一个大于3的正整数 n=");
    scanf("%d",&n);
    for(i=2;i<n;i++)       //可将n换成n/2 
        if(n%i==0) break;
    if(i<n)                //可将n换成n/2
        printf("%d不是素数\n",n);
    else
        printf("%d是素数\n",n);
    return 0;
} 

运行结果…………………………
在这里插入图片描述

二、统计素数个数

问题:求50以内的素数的个数

程序1…………………………

#include<stdio.h>             //引用平方根sqrt 
#include<math.h>
int main()
{
    int i,n,k;
    int sum=0,count=0;
    printf("求[0,50]之间素数的个数:\n\n");
    for(n=2;n<=50;n++)
    {
        k=sqrt(n);             //求n的平方根 
        for(i=2;i<=k;i++)
            if(n%i==0) break;
        if(i>=k+1)
            count++;
    }
    printf("素数个数:count=%d个\n",count);
    return 0; 
}

运行结果…………………………
在这里插入图片描述
在这里插入图片描述
程序2…………………………

这个程序没有用math函数,但是里面有一些细节需要我们注意:

#include<stdio.h>
int main()
{
    int m,k,flag,count=0;      //count=0需在开头定义中赋值 
    for(m=2;m<=50;m++)
    {
        flag=1;     //可以在本行和开头定义是同时对flag赋值,但不可以只在开头时定义flag=1
        for(k=2;k<m;k++)
            if(m%k==0)
            {
                flag=0;
                break;
            }
        if(flag)    //可将 flag 换成 flag!=0
            count++;
    }
    printf("50以内素数个数count=%d\n",count);
    return 0;
}

在这里插入图片描述

三、输出范围素数

问题:求100~200的全部素数

程序…………………………

#include<stdio.h>
#include<math.h>
int main()
{
    int i,n,k,m=0;
    printf("输出[100,200]之间的全部素数:\n\n");
    for(n=101;n<=200;n=n+2)
    {
        k=sqrt(n);
        for(i=2;i<=k;i++)
            if(n%i==0) break;
        if(i>=k+1)
        {
            printf("%d ",n);
            m++;
        }
        if(m%10==0)
            printf("\n");
    }
    printf("\n");
    return 0; 
}

运行结果…………………………
在这里插入图片描述
程序2…………………………

#include<stdio.h>
#include<math.h>
int main()
{
    int i,n,k;
    int sum=0,count=0;
    printf("求[19,101]之间的素数之和、素数的个数:\n\n");
    for(n=19;n<=101;n++)
    {
        k=sqrt(n);
        for(i=2;i<=k;i++)
            if(n%i==0) break;
        if(i>=k+1)
        {
            sum=sum+n;
            count++;
        }
    }
    printf("素数之和:sum=%d\n",sum);
    printf("素数个数:count=%d个\n",count);
    return 0; 
}

运行结果…………………………
在这里插入图片描述
在统计和求和可输出全部素数:
在这里插入图片描述

在这里插入图片描述
如果输出内容多的话可以加上换行:

#include<stdio.h>
#include<math.h>
int main()
{
    int i,n,k,m=0;
    int sum=0,count=0;
    printf("求[19,101]之间的素数之和、素数的个数:\n\n");
    for(n=19;n<=101;n++)
    {
        k=sqrt(n);
        for(i=2;i<=k;i++)
            if(n%i==0) break;
        if(i>=k+1)
        {
            sum=sum+n;
            count++;
            printf("%d ",n);
            m++; 
        }
        if(m%10==0)
            printf("\n");
    }
    printf("\n\n素数之和:sum=%d\n",sum);
    printf("素数个数:count=%d个\n",count);
    return 0; 
}

运行结果……………………
在这里插入图片描述
其它:

C语言与计算机语言(内含Hello world!详解)
完数 (判断、范围输出)
水仙花数(输出全部水仙花数)
判断闰年的3种方法(判断+范围输出)

在这里插入图片描述
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

星空之路Star

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

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

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

打赏作者

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

抵扣说明:

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

余额充值