您的位置:首页 > 其它

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

2012-09-02 20:36 197 查看
今天研究了一下求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的开方数)的范围内找出所有质数的倍数将其置为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;
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  素数 质素