用c++实现求一个数字的所有因子,要求时间和空间复杂度最小
时间: 2024-05-10 12:19:48 浏览: 131
maxmin.rar_matlab例程_C/C++_
好的,以下是C语言实现求一个数字的所有因子的代码,其中时间复杂度为O(sqrt(n)),空间复杂度为O(1):
```c
#include <stdio.h>
int main() {
int n;
printf("请输入要求因子的数字:\n");
scanf("%d", &n);
printf("%d的因子有:\n", n);
int i;
for (i = 1; i * i <= n; i++) {
if (n % i == 0) {
printf("%d ", i);
if (i != n / i) {
printf("%d ", n / i);
}
}
}
printf("\n");
return 0;
}
```
以上代码通过从1到sqrt(n)的循环,判断n是否能够被循环变量i整除,如果可以,就是n的一个因子,同时也能得到n/i是另一个因子。由于循环中只使用了一个循环变量i,因此空间复杂度为O(1)。同时由于循环次数为sqrt(n),因此时间复杂度为O(sqrt(n))。
阅读全文