Advertisement
Guest User

Untitled

a guest
Feb 19th, 2019
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 0.92 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. int *prefix(char *string) {
  6.     int *out = (int *)malloc(strlen(string) * sizeof(int));
  7.    
  8.     int j = 0;
  9.     for (int i = 1; i < strlen(string); i++) {
  10.         while ((j > 0) && (string[j] != string[i])) j = out[j - 1];
  11.         if(string[j] == string[i]) j++;
  12.         out[i] = j;
  13.     }
  14.    
  15.     return out;
  16. }
  17.  
  18. int main(int argc, char **argv) {
  19.     char *string = argv[1];
  20.     int size_string = strlen(string);
  21.     int *prefix_value = prefix(string);
  22.    
  23.     for (int i = 0; i < size_string; i++) {
  24.         printf(" %d", prefix_value[i]);
  25.     }
  26.    
  27.     printf("\n");
  28.    
  29.     for (int i = 1; i < size_string; i++) {
  30.         if ((prefix_value[i]) && !(prefix_value[i] % (i + 1 - prefix_value[i]))) {
  31.             printf("%d %d\n", i + 1, (i + 1) / (i + 1 - prefix_value[i]));
  32.         }
  33.     }
  34.    
  35.     free(prefix_value);
  36.    
  37.     return 0;
  38. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement