fork download
  1. /*
  2. Se dă un vector cu n elemente, numere naturale. Afișați în ordine descrescătoare valorile din vector care sunt prime cu ultimul element al vectorului.
  3.  
  4.   Input:
  5.   Programul citește de la tastatură numărul n, iar apoi n numere naturale, reprezentând elementele vectorului
  6.   Output:
  7.   Programul va afișa pe ecran valorile cerute, în ordine descrescătoare, separate prin exact un spațiu.
  8.  
  9.   Restrictii si precizari:
  10.  
  11.   - 1 <= n <= 1000
  12.  
  13.   - cele n numere citite vor fi mai mici decât 1.000.000.000
  14.  
  15. Example:
  16.  
  17.  
  18. Input:
  19.   8
  20.  
  21.   16 7 63 1 5 9 14
  22.  
  23. Output:
  24.   9 5 3 1
  25. */
  26.  
  27.  
  28. #include <stdio.h>
  29.  
  30. void countingsort(long long *p, int n) {
  31.  
  32. long long B[n+1], C[n+1], i, j;
  33.  
  34. for(i = 0; i < n; ++i) C[i] = p[i];
  35.  
  36. for(i = 0; i < n; ++i) B[i] = 0;
  37.  
  38. for(i = 0; i < n - 1; ++i) {
  39.  
  40. for(j = i + 1; j < n; ++j) {
  41.  
  42. if(C[i] < C[j]) {
  43.  
  44. B[i]++;
  45.  
  46. } else {
  47.  
  48. B[j]++;
  49. }
  50.  
  51. }
  52. }
  53.  
  54. for(i = 0; i < n; ++i) p[B[i]] = C[i];
  55. }
  56.  
  57. int euclid(int a, int b) {
  58. int r;
  59. while(b) {
  60. r = a % b;
  61. a = b;
  62. b = r;
  63. }
  64. return a;
  65. }
  66.  
  67. int main() {
  68.  
  69. int i, j, n, k = 0;
  70.  
  71. scanf("%d", &n);
  72.  
  73. long long arr[n+1], arr2[n+1];
  74.  
  75. for(i = 0; i < n; ++i){
  76.  
  77. scanf("%lld", &arr[i]);
  78. }
  79.  
  80. for(i = 0; i < n - 1; ++i) {
  81.  
  82. if(euclid(arr[i], arr[n-1]) == 1) {
  83.  
  84. arr2[k++] = arr[i];
  85. }
  86. }
  87.  
  88. countingsort(arr2, k);
  89.  
  90. for(i = 0; i < k; ++i) {
  91.  
  92. printf("%lld ", arr2[i]);
  93. }
  94.  
  95. return(0);
  96. }
  97.  
Success #stdin #stdout 0s 5668KB
stdin
8
16 7 63 1 5 9 23 14
stdout
23 9 5 1