今天研究了一下求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;
}