如何求一个数组中的数是否为质数(素数)
2012-09-02 20:36
197 查看
今天研究了一下求1-100之内素数的方法,花了一个多小时,为便以后研究记录下来。
方法1:
方法1:
//利用筛法查找质数(素数) #include "stdio.h" #include "math.h" int main() { int a[100]; int i,newp; //在数组中加入一百个数 for(i=0;i<100;i++) { a[i]=i+1; } //将所有不是质数的数置为零,1不是质数将其置为0。 a[0]=0; //质数的倍数一定不为质数,在数字2-sqrt(n)(sqrt(n)函数的作用是求n的开方数)的范围内找出所有质数的倍数将其置为0 for(newp=1;a[newp]<sqrt(100);newp++) { //判断其是否为质数 if(a[newp]!=0) { //从该质数的后一个数判断是否为该质数的倍数 i=newp+1; while(a[i]<101) { if(a[i]%a[newp]==0) { a[i]=0;//将该质数的倍数置为0 } i++; } } } //打印所有的质数 for(i=0;i<100;i++) { if(a[i]!=0) printf("%5d",a[i]); } return 0; }
//方法2:这种方法比较简单,就是看2到该数减去1之内的数能否被该数整除 #include "stdio.h" int main() { int a[100]; int i,j,flag; for(i=0;i<100;i++) { a[i]=i+1; } //取出2-a[99]中的数进行判断 for(i=1;a[i]<101;i++) { flag=1; for(j=2;j<a[i];j++) { if(a[i]%j==0) { flag=0; break; } } if(flag==1) { printf("%5d",a[i]); } } return 0; }
//方法3 与方法2不同的是看2到该数的开方数范围内的数能否被该数整除 #include "stdio.h" #include "math.h" int main() { int a[100]; int i,j,t; for(i=0;i<100;i++) { a[i]=i+1; } for(i=1;i<100;i++) { t=sqrt(a[i]); for(j=2;j<t+1;j++) { if(a[i]%j==0) break; } if(j==t+1) printf("%5d",a[i]); } return 0; }
相关文章推荐
- 如何判断一个数是否为素数(质数)?
- 如何高效检查一个数组中是否包含某个值?
- JAVA 如何判断一个字符串是否在一个字符串数组中?(好的编程习惯)
- 判断一个整数是否为素数(或称为质数)
- 如何用递归算法判断一个数组是否是递增
- 如何高效的检测一个数组是否包含某一个值
- 如何在前端用js判断一个元素在一个数组中是否存在
- 如何判断一个整数数组中是否有重复元素
- 如何判断一个数组中的数值是否连续相邻
- 算法:从键盘循环输入一个整数,判断是否是素数\质数
- js如何判断一组数字是否连续,得到一个临时数组[[3,4],[13,14,15],[17],[20],[22]];
- 【js】——如何判断一个字符是否在某个字符数组中
- 如何判断一个整数数组中是否有重复元素
- 如何判断一个数是否为质数&得到质数序列
- 如何判断一个数是否为素数
- 如何判断一个整数数组中是否有重复元素?要求时间复杂度O(n),空间复杂度O(1)
- 如何判断一个数是否为素数
- 如何判断一个数是否是素数
- 如何判断一个String字符是否在string[]数组里
- C++如何判断一个数字是否为质数