妙趣横生算法 1:利用数组求前n个质数
2012-01-20 11:18 藯蓝枫叶 阅读(1085) 评论(1) 编辑 收藏 举报实例说明:
要求确定一个数m是否是质数,可以用已求出的质数对m的整除性来确定。
实例解析
质数,又称素数,指在一个大于1的自然数中,除了1和此整数自身外,无法被其他自然数整除的数。
如果整数m,如果它不能被小于它的质数整除,则m也是质数。引入质数表primes[],已求得的质数个数为pc.求前n个质数过程可用以下算法描述:
程序代码
#include <stdio.h> #define N 50 int main(int argc, char *argv[]) { int primes[N];/*引入质数素*/ int pc,m,k;/*pc质数个数,m测试的数,k能够被整除的数*/ printf("The first %d prime number are: \n",N); primes[0]=2; /*2是第一个质数*/ pc=1; /*已经有1个质数*/ m=3;/*被测试的数从3开始*/ while(pc<N) { /*调整m 使它为下一个质数*/ k=0; while(primes[k]*primes[k]<=m) { if(m%primes[k]==0) { /*m是合数*/ m+=2;/*让m取下一个奇数*/ k=1;/*不必用primes[0]=2去测试m,所以k从1开始*/ } else { k++;/*继续用一个质数去测试*/ } } primes[pc++]=m; m+=2;/*除2外,其它质数均是奇数*/ } /*输出primes[0]到primes[pc-1]*/ for(k=0;k<pc;k++) { printf("%4d",primes[k]); } printf("\n\n Press any key to quit...\n"); getchar(); }
#include <stdio.h> #define N 50 int main(int argc, char *argv[]) { int primes[N];/*引入质数素*/ int pc,m,k;/*pc质数个数,m测试的数,k能够被整除的数*/ printf("The first %d prime number are: \n",N); primes[0]=2; /*2是第一个质数*/ pc=1; /*已经有1个质数*/ m=3;/*被测试的数从3开始*/ while(pc<N) { /*调整m 使它为下一个质数*/ k=0; while(primes[k]*primes[k]<=m) { if(m%primes[k]==0) { /*m是合数*/ m+=2;/*让m取下一个奇数*/ k=1;/*不必用primes[0]=2去测试m,所以k从1开始*/ } else { k++;/*继续用一个质数去测试*/ } } primes[pc++]=m; m+=2;/*除2外,其它质数均是奇数*/ } /*输出primes[0]到primes[pc-1]*/ for(k=0;k<pc;k++) { printf("%4d",primes[k]); } printf("\n\n Press any key to quit...\n"); getchar(); }