试商判别法求素数和筛选法求素数个有所长。试商判别法较为直观,设计容易实现,因而常常被人们使用。筛选法在较大的整数判别上效率更高些。但是设计较难把握。
1,试商判别法求素数
#include <stdio.h>
#include <math.h>
int main(void)
{
long start = 0, end = 0, i = 0, j = 0;
int zf = 0, n = 0;
printf("Please input the inquire interval [start-end][3-?]: ");
scanf("%ld %ld", &start, &end);
if(start == 2)
++start;
for(i=start; i<=end; i+=2) {
for(zf=0,j=3; j<=sqrt(i); j+=2)
if(i%j==0)
{zf = 1; break;}
if(zf==0) {
printf("%7ld", i);
++n;
if(n%10 == 0)
printf("\n");
}
}
printf("\nThere are %d prime in this interval\n", n);
return 0;
}
2,筛选法求素数
#include <stdio.h>
#include <math.h>
int main(void)
{
long c, d, g, i, j, k;
int e, n;
static long a[100000];
printf("Please input the inquire interval [start-end][3-?]: ");
scanf("%ld %ld", &c, &d);
if(c%2==0)
++c;
e = (d-c)/2;
i = 1;
while(i<sqrt(d)) {
i+=2;
g = 2*(c/(2*i))+1;
if(g==1) g=3;
j = i*g;
while(j<=d){
if(j>=c)
a[(j-c)/2]=-1;
j = j+2*i;
}
}
for(n=0,k=0; k<=e; ++k)
if(a[k] != -1) {
++n;
printf("%ld ", c+2*k);
if(n%10==0)
printf("\n");
}
printf("\nThere are %d prime in this interval\n", n);
return 0;
}