用数组求素数
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 }
以上是关于用数组求素数的主要内容,如果未能解决你的问题,请参考以下文章