如何求一个数组中的数是否为质数(素数)

来源:互联网 发布:版权局 网络音乐 编辑:程序博客网 时间:2024/05/20 20:45

今天研究了一下求1-100之内素数的方法,花了一个多小时,为便以后研究记录下来。

方法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的开方数)的范围内找出所有质数的倍数将其置为0for(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;}