判断素数的方法实现与改进 【c语言】

在100-200之间,如何实现素数的判断?今天讨论一下。


1. 素数的判断:能被1和它本身整除的数。

2. 代码的功能实现与改进:

【1】

    1. 第一步:先把100-200打印出来,再在里面取判断
    2. 第二步:判断(2,i-1)之间的数能否被i整除,直到有 i = j 的时候,就打印出结果(因为素数时不能被整除的数字)
    3. 第三步:如果能被整除,break跳走,因为不符合素数
    4. int main()
      {
          int i=0
          for(i=100;i<=200;i++)
          {
                  int j=0;
                  for(j=2;j<i;j++)
                  {
                      if(i%j == 0)
                      {
                          break;                
                      }            
                  }
                  if(i == j)
                  {
                      printf("%d ",i)            
                  }
          }
          return 0;
      }

【2】

  •  
    1. 在1基础上改进
    2. 同上,也是先打印出100-200的数,再在里面取判断出素数,复合的打印胡来,    不符合的跳过
    3. 在循环体内,也是去判断(2,i-1)之间的书去和 i 整除取余数,
    4. 只不过设置了一个标志,先定义为1
    5. 当取余数为0的时候(即能被整除,不是素数),就定义为0
    6. 最后打印输出的知识那些1,而标记为0的数则不被输出。
    7. int main()
      {
          int i=0
          for(i=100;i<=200;i++)
          {
                  int j=0;
                  int flag=1;
                  for(j=2;j<i;j++)
                  {
                      if(i%j == 0)
                      {
                          flag = 0;
                          break;                
                      }            
                  }
                  if(flag == 1)
                  {
                      printf("%d ",i)            
                  }
          }
          return 0;
      }

【3】

  •  
    1. 在2继续改进
    2. 也同上,知识区别在于,这次在判断素数的时候,不再是从2一词去去数字
    3. 而是取根号该数字即可,因为:
    4. 假设m = a * b ,则 a或b <= √m  ,也就是说能被根号的都不是素数,否则就是素数
    5. #include <math.h>
      int main()
      {
          int i = 0;
      
          for (i = 100; i <= 200; i++)
          {
              int j = 0;//j表示2到根号i
              //数 <= 根号i
              int flag = 1;
              for (j = 2; j <= sqrt(i); j++)
              {
                  if (i % j == 0)
                  {
                      flag = 0;
                      break;
                  }
              }
              if (flag==1)
              {
      
                  printf("%d ", i);
              }
          }
      
          return 0;
      }

【4】

  •  
    1. 继续改进
    2. 改进1:因为偶数肯定都不是素数,所以在取100-200的数时,i 的改变量为+2.
    3. 改进2:加入求数量的变量c.
    4. #include <math.h>
      int main()
      {
          int i = 0;
          int c = 0;
          for (i = 101; i <= 200; i+=2)//偶数肯定不可以
          {
              //2~sqrt(101)之间的数
              int j = 0;//j表示2到i-1的数字
              int flag = 1;
              for (j = 2; j <= sqrt(i); j++)
              {
                  if (i % j == 0)
                  {
                      flag = 0;
                      break;
                  }
              }
              if (flag==1)
              {
                  c++;
                  printf("%d ", i);
              }
          }
          printf("\n个数:%d\n", c);
          return 0;
      }

      基于此,素数判断的设计与改进完成。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值