用数组求素数

Posted old-horse

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用数组求素数相关的知识,希望对你有一定的参考价值。

1.解释下什么是筛选法?

        筛选法又称筛法,具体做法是:先把N个自然数按次序排列起来。1不是质数,也不是合数,要划去。第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。2后面第一个没划去的数是3,把3留下,再把3后面所有能被3整除的数都划去。3后面第一个没划去的数是5,把5留下,再把5后面所有能被5整除的数都划去。这样一直做下去,就会把不超过N的全部合数都筛掉,留下的就是不超过N的全部质数。

2.程序步骤:


<1> 先将1挖掉(因为1不是素数)。
<2> 用2去除它后面的各个数,把能被2整除的数挖掉,即把2的倍数挖掉。
<3> 用3去除它后面的各数,把3的倍数挖掉。
<4> 分别用5…各数作为除数去除这些数以后的各数。
3.具体应用(求100以内的素数):

        基本思想是:把从1开始的、某一范围内的正整数从小到大顺序排列,把不是素数的数全部赋值为0,最后只输出不是零的数即素数。1不是素数,首先把它换为0。剩下的数中选择最小的数是素数,然后把它的倍数全部换为0。依次类推,直到结束。

 1 #include<stdio.h>
 2 int main()
 3 {
 4     int i, j,k, a[51];
 5     for (i = 1; i <= 50;i++)    //给数组赋值
 6     {
 7         a[i] = i;
 8     }
 9     a[1] = 0;            //a[1]数组在后面模2判断错误需要在前面先赋值
10     for (j = 1; j <= 50; j++)            
11     {
12         for (k = j+1; k <= 50; k++)        
13         {
14             if (a[j]!=0&&a[k]!=0)        
15             {
16                 if (a[k] % a[j] == 0)        //是把外层循环当除数不是把外层循环做被除数
17                 {
18                     a[k] = 0;            //不是素数的赋值为0
19                 }
20             }
21         }
22     }    
23     for (i = 1; i <= 50; i++)
24     {
25         if (a[i] != 0)            //输出素数
26         {
27             printf("%d
", a[i]);
28         }
29 
30     }
31     return 0;
32 }

 

以上是关于用数组求素数的主要内容,如果未能解决你的问题,请参考以下文章

c语言用fun函数求n以内的素数,求n=20的值?

C语言,求15以内的素数,关于num=1时,怎么修改?求大神

用C++求50~100内的素数,具体问题如下

为什么求模运算要用素数(质数)

vb实验 随机数中求奇偶数和素数并进行排序

用c语言求1000以内的素数(素数是只能被1和它本身整除的数)