我想在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++;
}
}
最佳答案 由于大小在开始时是未知的,因此为一个或多个元素的大小分配空间是低效的.
一种可能的解决方案是:每当大小不足时,重新分配空间(使用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
... ...
这样,重新分配的次数不多,而且你不会浪费太多空间.