【发布时间】:2017-11-24 20:48:51
【问题描述】:
问题:找到 n 个素数。
#include<stdio.h>
#include<stdlib.h>
void firstnprimes(int *a, int n){
if (n < 1){
printf("INVALID");
return;
}
int i = 0, j, k; // i is the primes counter
for (j = 2; i != n; j++){ // j is a candidate number
for (k = 0; k < i; k++)
{
if (j % a[k] == 0) // a[k] is k-th prime
break;
}
if (k == i) // end-of-loop was reached
a[i++] = j; // record the i-th prime, j
}
return;
}
int main(){
int n;
scanf_s("%d",&n);
int *a = (int *)malloc(n*sizeof(int));
firstnprimes(a,n);
for (int i = 0; i < n; i++)
printf("%d\n",a[i]);
system("pause");
return 0;
}
我的函数的内部循环运行 i 次(最多),其中 i 是低于给定候选数的素数的数量,外部循环运行第 (n 个素数 - 2) 次。
如何以大 O 表示法推导出该算法的复杂性?
提前致谢。
【问题讨论】:
-
旁白:您不需要检查 all 以前的素数作为因子 - 只需检查那些 a[k] * a[k] <= j; 而且偶数也不需要检查。
-
... 除了
2这是唯一的偶数。所以用2初始化数组后,外循环可以是for (j = 3; i != n; j+=2)
标签: c time-complexity big-o primes