Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- static int prime_factor(int n, int *factors, int *factors_size);
- static void expand_arr(int **arr, int *size);
- static void make_into_ones(int x);
- int main(void) {
- int n; scanf("%d", &n);
- int *factors = NULL;
- int factors_size = 0;
- expand_arr(&factors, &factors_size);
- int cnt = prime_factor(n, factors, &factors_size);
- for (int i = 0; i < cnt; i++) {
- make_into_ones(factors[i]);
- if (i != cnt - 1) printf("*");
- }
- printf("\n");
- free(factors);
- return 0;
- }
- static int prime_factor(int n, int *factors, int *factors_size) {
- if (n < 0) n *= -1;
- int x = 2, cnt = 0;
- while (n > 1) {
- if (n % x == 0) {
- n /= x;
- if (cnt >= *factors_size) {
- expand_arr(&factors, factors_size);
- }
- factors[cnt++] = x;
- x = 2;
- } else {
- x++;
- }
- }
- return cnt;
- }
- static void expand_arr(int **arr, int *size) {
- int *tmp = realloc( *arr, sizeof(int) * (2 * (*size) + 1));
- if (tmp == NULL) {
- fprintf(stderr, "Ran outta memory!");
- exit(1);
- }
- *arr = tmp;
- *size = 2 * (*size) + 1;
- }
- static void make_into_ones(int x) {
- if (x < 1) return;
- printf("(");
- for (int i = 1; i < x; i++) {
- printf("1+");
- }
- printf("1)");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement