当前位置:   article > 正文

求素数的几种常见方法_如何求素数

如何求素数

求素数的几种常见的方法

文章目录

  • 素数是什么?
  • 求素数的方法
    • 1,遍历法
    • 2,筛选法


素数

简单来说素数就是只能被1和它本身整除

求素数的方法

1.遍历法

遍历法就是从1开始,一个数一个数的来除以数字number,但我们可以从2开始,同时我们知道,2*3跟3*2是一样的,所以我们只需要考虑从2到sqrt(number),(sqrt是求算术平方根)这样既可以简便一些还可以减少程序运行时间

代码如下(示例):

  1. #include <stdio.h>
  2. #include <math.h>
  3. int Isprime(int m)//如果是素数则返回1,否则返回0 
  4. {
  5.     int n;
  6.     if(m%2==0)
  7.     return 0;
  8.     for(n=3;n<=sqrt(m);n+=2)
  9.     {
  10.         if(m%n==0)
  11.         return 0;
  12.     }
  13.     return 1;
  14. }
  15. int main()
  16. {
  17.     int i,number;
  18.     scanf("%d",&number);//输入数字number 
  19.     for(i=2;i<n;i++)
  20.     {
  21.         if(Isprime(i))//条件为真,则打印数字 
  22.         printf("%d ",i);
  23.     }
  24. }

2.筛选法

将2~n之间的正整数放在数组内存储,将数组中2之后的所有能被2整除的数清0,再将3之后的所有能被3整除的数清0 ,以此类推,直到n为止。数组中不为0 的数即为素数。

代码如下(示例):

  1. #include <stdio.h>
  2. int main() 
  3. {
  4.     int number = 0;
  5.     scanf("%d",&number);
  6.     int i,j,arr[100];
  7.     for(i=0;i<number-1;i++) //将2~number之间的正整数放在数组内
  8.     {
  9.         arr[i] = i+2;
  10.     }
  11.     int count = 1;
  12.     for(j=2;j<=number;j++,count++)//设计一个count,是因为遍历的是arr[count]后面的数能不能被j整除,而不是遍历整个数组能不能被j整除
  13.     {
  14.         int k=0;
  15.         for(k=count;k<number-1;k++) //求解素数,将能被整除是数清为0
  16.         {
  17.             if(arr[k]%j==0)
  18.             {
  19.                 arr[k] = 0;
  20.             }
  21.         }
  22.     }
  23.     int a = 0;
  24.     int score = 0;//计数器,计算不是素数的个数
  25.     for(;a<=number-2;a++)
  26.     {
  27.         if(arr[a]!=0)
  28.         {
  29.             printf("%d ",arr[a]);
  30.         }
  31.         else
  32.         score++;
  33.     }
  34.     printf("\n%d\n",score);
  35.     return 0;
  36. }

可能写的并不是太好,但还是应该可以看懂的吧

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/405950
推荐阅读
相关标签
  

闽ICP备14008679号