我想用C语言写一个程序,其中用户输入两个数字a和b。
0 & lt;& lt;INT_MAX
& lt;b & lt;INT_MAX
程序检查a和b之间有多少素数,并将它们全部保存在一个动态数组中。
对于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
... ...
这样,重新分配的次数就很少,也不会浪费太多的空间。
如果你能使用c++ -你可以使用std::vector来解决你的问题