码迷,mamicode.com
首页 > 编程语言 > 详细

用数组求素数

时间:2020-03-16 14:42:24      阅读:82      评论:0      收藏:0      [点我收藏+]

标签:顺序   return   去除   pre   一个   解释   style   nbsp   第一个   

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\n", a[i]);
28         }
29 
30     }
31     return 0;
32 }

 

用数组求素数

标签:顺序   return   去除   pre   一个   解释   style   nbsp   第一个   

原文地址:https://www.cnblogs.com/old-horse/p/12503550.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!