我想在C中编写一个程序,用户输入2个数字a和b。
0< a< INT_MAX
a< b< INT_MAX
程序检查a和b之间的Prime数量,并将所有Prime数字保存在动态数组中。
对于malloc
函数,我需要数组的大小,这意味着我必须首先检查所有数字,如果它们是单数,只是为了得到数组的大小,
然后使用malloc()
,
然后再次检查所有数字以填充数组。
是否有可能使这种运行更快,而不是两次做同样的事情?
for (int i = a; i <= b; i++)
{
if (check_if_prime(i) == 0)
size++;
}
primze_numbers = malloc(size*sizeof(int));
int j = 0;
for (int i = a; i <= b; i++)
{
if(check_if_prime(i) == 0)
{
prime_numbers[j] = i;
j++;
}
}
答案 0 :(得分:2)
由于大小在开头是未知的,因此为一个元素的大小分配空间是低效的。
一种可能的解决方案是:只要尺寸不够,就重新分配空间(使用realloc
)两倍于之前尺寸的尺寸。
Real size - Space size
0 0
1 1
2 2
3 4
4 4
5 8
6 8
7 8
8 8
9 16
10 16
... ...
这样,重新分配的次数不多,而且你不会浪费太多空间。
答案 1 :(得分:0)
如果你能够使用c ++ - 你可以使用std :: vector来解决你的问题。