Edit3:通过将数组的初始化限制为仅奇数进行优化。谢谢@罗尼!
Edit2:谢谢大家,看来我对此无能为力了。
编辑:我知道 Python 和 Haskell 是用其他语言实现的,并且或多或少地执行我下面的相同操作,并且编译的 C 代码将在任何一天击败它们。我只是想知道标准 C(或任何库)是否具有更快地执行此操作的内置函数。
我正在使用 Eratosthenes 的算法在 C 中实现一个素筛,并且需要初始化一个任意大小的整数数组n从 0 到n。我知道在 Python 中你可以这样做:
integer_array = range(n)
就是这样。或者在 Haskell 中:
integer_array = [1..n]
但是,我似乎找不到在 C 中实现的类似方法。我提出的解决方案是初始化数组,然后对其进行迭代,将每个值分配给该点的索引,但感觉非常低效。
int init_array()
{
/*
* assigning upper_limit manually in function for now, will expand to take value for
* upper_limit from the command line later.
*/
int upper_limit = 100000000;
int size = floor(upper_limit / 2) + 1;
int *int_array = malloc(sizeof(int) * size);
// debug macro, basically replaces assert(), disregard.
check(int_array != NULL, "Memory allocation error");
int_array[0] = 0;
int_array[1] = 2;
int i;
for(i = 2; i < size; i++) {
int_array[i] = (i * 2) - 1;
}
// checking some arbitrary point in the array to make sure it assigned properly.
// the value at any index 'i' should equal (i * 2) - 1 for i >= 2
printf("%d\n", int_array[1000]); // should equal 1999
printf("%d\n", int_array[size-1]); // should equal 99999999
free(int_array);
return 0;
error:
return -1;
}
有一个更好的方法吗?(不,显然没有!)