允许计算超大数字(n<8 * 10^18)的所有质因数,复杂度为:O(n^0.5)
#include <stdio.h>
#include <math.h>
#define MAX_FACTORS 50
void prime_factors(long long n, int* factors) {
int i = 0;
while (n % 2 == 0) {
*(factors + i) = 2;
i++;
n = n / 2;
}
for (int j = 3; j <= sqrt(n); j = j + 2) {
while (n % j == 0) {
*(factors + i) = j;
i++;
n = n / j;
}
if (n == 1)
break;
}
if (n > 2) {
*(factors + i) = n;
i++;
}
*(factors + i) = -1;
}
int main() {
long long n = 999999999999999999;
int factors[MAX_FACTORS];
prime_factors(n, factors);
printf("The prime factors of %lld are: ", n);
for (int i = 0; *(factors + i) != -1; i++) {
printf("%d ", *(factors + i));
}
return 0;
}