Advertisement
oaktree

ones.c

Nov 22nd, 2016
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.22 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. static int prime_factor(int n, int *factors, int *factors_size);
  5. static void expand_arr(int **arr, int *size);
  6. static void make_into_ones(int x);
  7.  
  8. int main(void) {
  9.  
  10.     int n; scanf("%d", &n);
  11.  
  12.     int *factors = NULL;
  13.     int factors_size = 0;
  14.     expand_arr(&factors, &factors_size);
  15.  
  16.     int cnt = prime_factor(n, factors, &factors_size);
  17.  
  18.     for (int i = 0; i < cnt; i++) {
  19.         make_into_ones(factors[i]);
  20.         if (i != cnt - 1) printf("*");
  21.     }
  22.     printf("\n");
  23.  
  24.     free(factors);
  25.  
  26.     return 0;
  27. }
  28.  
  29. static int prime_factor(int n, int *factors, int *factors_size) {
  30.     if (n < 0) n *= -1;
  31.  
  32.     int x = 2, cnt = 0;
  33.     while (n > 1) {
  34.         if (n % x == 0) {
  35.             n /= x;
  36.             if (cnt >= *factors_size) {
  37.                 expand_arr(&factors, factors_size);
  38.             }
  39.             factors[cnt++] = x;
  40.             x = 2;
  41.         } else {
  42.             x++;
  43.         }
  44.     }
  45.     return cnt;
  46. }
  47.  
  48. static void expand_arr(int **arr, int *size) {
  49.     int *tmp = realloc( *arr, sizeof(int) * (2 * (*size) + 1));
  50.     if (tmp == NULL) {
  51.         fprintf(stderr, "Ran outta memory!");
  52.         exit(1);
  53.     }
  54.     *arr = tmp;
  55.     *size = 2 * (*size) + 1;
  56. }
  57.  
  58. static void make_into_ones(int x) {
  59.     if (x < 1) return;
  60.     printf("(");
  61.     for (int i = 1; i < x; i++) {
  62.         printf("1+");
  63.     }
  64.     printf("1)");
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement