JAVA版
public static void main(String[] args) {
long t = System.currentTimeMillis();
StringBuffer str = new StringBuffer();
int i = 2, j = 2, q = 0;
while (i <= 100000) {
j = 2;
int k = (int) Math.sqrt(i);
while (j <= k) {
if (i % j == 0) {
break;
}
j++;
}
if (j > k) {
str.append(i).append(" ");
q++;
if (q % 50 == 0) {
str.append(" \n");
}
}
i++;
}
long s = System.currentTimeMillis();
long m=s-t;
System.out.println();
System.out.println("有质数" + q + "个");
System.out.println(str.toString());
System.out.print("计算指数的时间"+m+"毫秒");
}C 版本计算int main()
{
clock_t start,finish;
start = clock();
int n = 100000;
int i, j;
int count = 0;
char* flag = (char*)malloc( n+1 );
int mpLen = 2*3*5*7*11*13;
char magicPattern[mpLen];
for (i=0; i<mpLen; i++)
{
magicPattern[i++] = 1;
magicPattern[i++] = 0;
magicPattern[i++] = 0;
magicPattern[i++] = 0;
magicPattern[i++] = 1;
magicPattern[i] = 0;
}
for (i=4; i<=mpLen; i+=5)
magicPattern[i] = 0;
for (i=6; i<=mpLen; i+=7)
magicPattern[i] = 0;
for (i=10; i<=mpLen; i+=11)
magicPattern[i] = 0;
for (i=12; i<=mpLen; i+=13)
magicPattern[i] = 0;
int remainder = n%mpLen;
char* p = flag+1;
char* pstop = p+n-remainder;
while (p < pstop)
{
memcpy(p, magicPattern, mpLen);
p += mpLen;
}
if (remainder > 0)
{
memcpy(p, magicPattern, remainder);
}
flag[2] = 1;
flag[3] = 1;
flag[5] = 1;
flag[7] = 1;
flag[11] = 1;
flag[13] = 1;
int stop = n/13;
for (i=17; i <= stop; i++)
{
if (0 == flag[i]) continue;
int step = i*2;
for (j=i*17; j <= n; j+=step)
{
flag[j] = 0;
}
}
for (i=2; i<=n; i++)
{
if (flag[i]) count++;
} printf("%d\n",count);
count = 0;
for(i=2;i<n;i++)
{
if(flag[i])
{
printf("%d ",i);
count++;
if((count)%50==0)
printf("\n");
}
}
free(flag);
finish = clock();
printf("\n");
printf("time:%lf",(double)(finish-start)/CLOCKS_PER_SEC*1000);
return 0;
}到目前为止,C的速度要比java的快一倍以上。java的还能改进,求教导改进方法。javac算法