【C语言】求素数的三种方案

简介: 提示: /* 该文章仅限学习和分享,若有不足之处,还请私信于我进行改善 */

素数的定义

1、素数又叫质数。素数,指的是“大于1的整数中,只能被1和这个数本身整除的数”。

2、素数也可以被等价表述成:“在正整数范围内,大于1并且只有1和自身两个约数的数”


求100-200之间的素数

提示:以下是本篇文章正文内容,下面案例可供参考


这里给出一个题目,以该题为例:


求100-200之间的素数,并算出该范围内有多少个素数?


第一种方案

# include <stdio.h>
int main()
{
  int i;
  //先求出100-200之间的所有的数
  //这里给出一个for循环
  int count = 0;
  for(i = 100; i < 200; i++)
  {
    int j; //定义一个变量j用来表示因子
    for( j = 2; j < i ;j++) //用 2 到 i-1 之间的因子去试除i
    {
      if(i % j ==0)
      {
        break; //若能整除,则说明一定不是素数,跳出循环
      }
    }
    //当上一个for循环任意一个数i都不能被j(2到i-1)整除,也即j==i时,跳出for循环
    if (j == i) //此时因子i等于一个数本身,则说明是素数
    {
      count++;
      printf("%d ",i);//打印素数
    }
  }
  printf("\ncount = %d\n",count);//所有素数求出来之后,打印素数的个数
return 0;
}

第二种方案

此方案与上一种方案类似,定义了一个flag用来标记,为1是素数,为0则表示不是素数。

# include <stdio.h>
int main()
{
  int i;
  //先求出100-200之间的所有的数
  //这里给出一个for循环
  int count = 0;
  for(i = 100; i < 200; i++)
  {
    int j; //定义一个变量j用来表示因子
    int flag = 1;//此时定义一个flag标记,表示假设i是素数
    for( j = 2; j < i ;j++) //用 2 到 i-1 之间的因子去试除i
    {
      if(i % j ==0)
      {
        flag = 0;若能整除,则说明一定不是素数,把flag置为0
        break; 
      }
    }
    //当上一个for循环任意一个数i都不能被j(2到i-1)整除,也即j==i时,跳出for循环
    if (flag == 1) //此时判断如果flag还是为1,则说明i是素数
    {
      count++;
      printf("%d ",i);//打印素数
    }
  }
  printf("\ncount = %d\n",count);//所有素数求出来之后,打印素数的个数
return 0;
}

第三种方案

# include <stdio.h>
# include <math.h>
int main()
{
  int i;
  //先求出100-200之间的所有的数
  //这里给出一个for循环
  int count = 0;
  for(i = 101; i < 200; i += 2) // 因为偶数一定不是素数,这里缩小范围,在奇数中去找素数
  {
    int j; //定义一个变量j用来表示因子
    int flag = 1;//此时定义一个flag标记,表示假设i是素数
    //假设一个数m= a*b,那么这个数m它的因子a和b中一定至少有一个因子小于等于m的开平方数
    //拿12这个数来说   它的因子所有表示如下: 12=1*12=2*6=3*4=4*3=6*2=12*1
    //12的开平方数是2√3(2倍的根3),  2√3是大于3小于4的,那么用1,2,3去试除12之后,那么4,6,12就没必要再去试除12了
    //所以这里的因子范围给到 3 到 sqrt(i) ,sqrt()是C语言的一个库函数,用来求给定值的平方根,需要引用头文件<math.h>
    for( j = 2; j <= sqrt(i) ;j++)  
    {
      if(i % j == 0)
      {
        flag = 0;若能整除,则说明一定不是素数,把flag置为0
        break; 
      }
    }
    //当上一个for循环任意一个数i都不能被j(2到i-1)整除,也即j==i时,跳出for循环
    if (flag == 1) //此时判断如果flag还是为1,则说明i是素数
    {
      count++;
      printf("%d ",i);//打印素数
    }
  }
  printf("\ncount = %d\n",count);//所有素数求出来之后,打印素数的个数
return 0;
}


目录
相关文章
|
C语言
C语言之完数、素数、回文数合集
C语言之完数、素数、回文数合集
208 0
|
C语言
C语言Oj题判断素数几种方式详解
输入一个数判断它是不是素数,并且不是的情况把它打印出来不是素数。
158 1
|
C语言
【01】判断素数/质数(C语言)
【01】判断素数/质数(C语言)
|
10月前
|
存储 算法 C语言
【C语言程序设计——函数】素数判定(头歌实践教学平台习题)【合集】
本内容介绍了编写一个判断素数的子函数的任务,涵盖循环控制与跳转语句、算术运算符(%)、以及素数的概念。任务要求在主函数中输入整数并输出是否为素数的信息。相关知识包括 `for` 和 `while` 循环、`break` 和 `continue` 语句、取余运算符 `%` 的使用及素数定义、分布规律和应用场景。编程要求根据提示补充代码,测试说明提供了输入输出示例,最后给出通关代码和测试结果。 任务核心:编写判断素数的子函数并在主函数中调用,涉及循环结构和条件判断。
535 23
|
C语言
C语言初阶:如何判断是否为素数并且输出
C语言初阶:如何判断是否为素数并且输出
141 0
|
C语言
【C语言】输入一个数n,输出从n到n+100的范围内所有的素数,并统计素数的个数
【C语言】输入一个数n,输出从n到n+100的范围内所有的素数,并统计素数的个数
589 0
|
C语言
C语言----寻找100~999范围内的质数--素数
C语言----寻找100~999范围内的质数--素数
661 3
|
C语言
【C语言刷题每日一题】——打印100到200之间的素数
【C语言刷题每日一题】——打印100到200之间的素数
|
C语言 Windows
C语言素数的不同求法
C|素数的不同求法及在线测试比较
|
C语言
C语言---函数----100~n之间的素数
C语言---函数----100~n之间的素数
126 1