求2-n间的素数,n由键盘输入,循环变量分别从2到n、2到(int)sqrt(n),分别测出两个循环的所用时间

来源:百度知道 编辑:UC知道 时间:2024/04/30 12:09:55
编写一个程序,求2-n间的素数,n由键盘输入,循环变量分别从2到n、2到(int)sqrt(n),分别测出两个循环的所用时间

操作系统作业
在linux环境下运行

下面这个程序是我翻译 ªPrime is in Pª 时写下的
它找出小于N+1的素数
称为"筛选法",

"筛选法" 是古老的算法了, 考虑乘法的运算时间不是 O(1) , 这个算法是个NP算法

在linux下你可以用 工具gprof 去看运行时间, <time.h> 里只提供了简单方法
在kernel api 里有较准确的方法, 但没必要

#include <stdio.h>
#include <math.h>

#define _Deleted -1

void SiezePrime(int*, int);
int main(void)
{
int i, j,
N; // Range of integers to sieze.

int *a; // Input.

printf("Input:");
scanf("%d", &N);

// Init a.
a = malloc(sizeof(int) * (N));
for (i = 2; i < N; i++)
a[i] = i;

// Find prime in array a.
SiezePrime(a, N);

// Output.
for (i = 2, j = 0; i < N; i++)
if (a[i] != _Deleted)
{

printf("%6d", a[i]);
// j is used to fomate the output.
if (++j % 10 == 0)
printf("\n");
}
}

void SiezePr