zhora_15

zalupa

Dec 6th, 2021
744
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void) {
  5.     int n, prev_size = 4;
  6.     int added[4] = {1,3,7,9};
  7.     int value, root = 4;
  8.     int *prev = malloc(prev_size * sizeof(int));
  9.     prev[0] = 2; prev[1] = 3; prev[2] = 5; prev[3] = 7;
  10.     int *arr = malloc(4 * prev_size * sizeof(int));
  11.     scanf("%d", &n);
  12.     int pos = 0, size = 1;
  13.     int *new_arr = malloc(size*sizeof(int));
  14.     if (n==1){
  15.         for (int i=0;i<4;++i){
  16.             printf("%d ", prev[i]);
  17.         }
  18.     }
  19.     else {
  20.         for (int i = 0; i < n - 1; ++i) {
  21.             pos = 0;
  22.             size = 1;
  23.             new_arr = realloc(new_arr, size * sizeof(int));
  24.             printf("%lu\n", 4 * prev_size * sizeof(int));
  25.             arr = realloc(arr, 4 * prev_size * sizeof(int));
  26.             printf("prev_size = %d\n", prev_size);
  27.             for (int k=0; k<prev_size; ++k){
  28.                 printf("%d ", prev[k]);
  29.             }
  30.             printf("\n");
  31.             for (int j = 0; j < prev_size; ++j) {
  32.                 for (int k = 0; k < 4; ++k) {
  33.                     value = prev[j] * 10 + added[k];
  34.                     printf("%d - %d; ", value, prev[j]);
  35.                     arr[j * 4 + k] = value;
  36.                 }
  37.             }
  38.             printf("\n");
  39.             for (int j = 0; j < 4 * prev_size; ++j) {
  40.                 while (root * root <= arr[j]) {
  41.                     ++root;
  42.                 }
  43.                 int res = 1;
  44.                 for (int k = 3; k < root; ++k) { // n != 1
  45.                     if (!(arr[j] % k)) {
  46.                         res = 0;
  47.                         break;
  48.                     }
  49.                 }
  50.                 if (res) {
  51.                     if (pos == size) {
  52.                         size *= 2;
  53.                         new_arr = realloc(new_arr, size * sizeof(int));
  54.                     }
  55.                     new_arr[pos] = arr[j];
  56.                     ++pos;
  57.                 }
  58.             }
  59.             prev_size = pos;
  60.             free(prev);
  61.             prev = malloc(prev_size);
  62.  
  63.             for (int j = 0; j < pos; ++j) {
  64.                 prev[j] = new_arr[j];
  65.             }
  66.             printf("new_array:\n");
  67.             for (int k = 0; k < pos; ++k) {
  68.                 printf("%d ", new_arr[k]);
  69.             }
  70.             printf("\nprev_copy:\n");
  71.             for (int k = 0; k < pos; ++k) {
  72.                 printf("%d ", prev[k]);
  73.             }
  74.             printf("\n");
  75.         }
  76.         for (int i = 0; i < pos; ++i) {
  77.             printf("%d ", new_arr[i]);
  78.         }
  79.     }
  80.     free(prev);
  81.     free(arr);
  82.     free(new_arr);
  83. }
  84.  
RAW Paste Data