求n以内素数。
素数又称质数,它是这样的整数,它除了能表示为它自己和1的乘积以外,不能表示为任何其它两个整数的乘积。
有两种方法:筛选法和开根号法
筛选法:从小到大筛去一个已知素数的所有倍数。依次删除可被2整除,3整除。。。。的数字,剩下的则为素数 。
开根号法:如果一个数(>2),对这个数求平方根,如果这个数能被这个数的平方根到2之间的任何一个(只要有一人就行)整除说明就不是质数,如果不能就说明是质数!
原理:假如一个数N是合数,它有一个约数a,a×b=N,则a、b两个数中必有一个大于或等于根号N,一个小于或等于根号N。因此,只要小于或等于根号N的数(1除外)不能整除N,则N一定是素数。
下面以刷选法为例:
#include <stdio.h>
#include <stdlib.h>
#define N 100000000
#define false 0
#define true 1
int main()
{
static int a[N];
unsigned int i,j,k;
int *p;
for(p=a;p<a+N;p++)
*p=true;
a[0]=a[1]=false;
i=2;
while(i<N)
{
while(a[i++]==true)
{
j=i-1;
break;
}
for(k=2;j*k<N;k++)
a[j*k]=false;
}
for(p=a;p<a+N;p++)
{
if(*p==true)
{
printf("%8ld",p-a);
}
}
getch();
return 0;
}