素数又称为质数,是除了1和本身之外,不能被其他数整除的一类数。
#include <stdio.h>
#include <math.h>
bool isPrime(int n)//素数判断
{
if(n<=1)//特判
return false;
int sqr = (int)sqrt(1.0*n);//根号n
for(int i=2;i<=sqr;i++)//遍历
{
if(n%i==0)//n是i的倍数,则n不是素数
return false;
}
return true;//n是素数
}
int main()
{
int n;
while(1)
{
scanf("%d",&n);
if(isPrime(n))
{
printf("%d 是素数\n",n);
}
else
{
printf("%d 不是素数\n",n);
}
}
return 0;
}
素数表
埃氏筛法:时间复杂度:O(nloglogn)
首先,将2到n范围内的所有整数写下来。其中最小的数字2是素数。将表中所有2的倍数都划去。表中剩余的最小数字是3,它不能被更小的数整除,所以是素数。再将表中所有3的倍数全都划去。依次类推,如果表中剩余的最小数字是m时,m就是素数。然后将表中所有m的倍数全部划去。像这样反复操作,就能依次枚举n以内的素数。
#include <stdio.h>
#include <math.h>
const int N=1024;//表长
int prime[N],Pnum=0;//prime数组存放素数,Pnum为素数个数
bool P[N]={0};//如果i为素数,则P[i]为false,否则为true
void Find_Prime()
{
for(int i=2;i<N;i++)//从2开始,i<N结束
{
if(P[i] == false)//如果i是素数
{
prime[Pnum++]=i;//素数存到数组
for(int j=i+i;j<N;j += i)//筛去所有i的倍数
P[j]=true;
}
}
}
int main()
{
Find_Prime();//调用函数
int n;
scanf("%d",&n);//打印素数个数
for(int i=0;i<n;i++)
{
if(i%12==0)
printf("\n");//换行
printf("%5d ",prime[i]);
}
return 0;
}