fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. bool yes(int a) {
  5. if (a < 0) a = -a; // на всякий случай, если есть отрицательные
  6. if (a < 2) return false; // 0 и 1 не простые
  7.  
  8. for (int i = 2; i < a; i++) {
  9. if (a % i == 0) return false;
  10. }
  11. return true;
  12. }
  13.  
  14. int main() {
  15. int n;
  16. cin >> n;
  17.  
  18. int* a = new int[n];
  19. for (int i = 0; i < n; i++) {
  20. cin >> a[i];
  21. }
  22.  
  23. int moved = 0; // сколько простых уже перенесли в НАЧАЛО
  24. int i = n - 1; // идём строго справа налево
  25.  
  26. while (i >= moved) { // не заходим в уже перенесённую "зону начала"
  27. if (yes(a[i])) {
  28. int t = a[i]; // запомнили простое число
  29.  
  30. // сдвигаем все элементы слева от i на 1 вправо,
  31. // чтобы освободить место в a[0]
  32. for (int j = i; j > 0; j--) {
  33. a[j] = a[j - 1];
  34. }
  35.  
  36. a[0] = t; // вставили простое в самое начало
  37. moved++; // зона "уже вставленных" простых увеличилась
  38.  
  39. // ВАЖНО: i НЕ уменьшаем!
  40. // потому что после сдвига в позицию i пришёл новый элемент,
  41. // его тоже нужно проверить
  42. } else {
  43. i--; // если не простое — просто идём дальше влево
  44. }
  45. }
  46.  
  47. for (int k = 0; k < n; k++) {
  48. cout << a[k] << " ";
  49. }
  50.  
  51. delete[] a;
  52. return 0;
  53. }
  54.  
Success #stdin #stdout 0.01s 5292KB
stdin
5
4
8
13
7
12
stdout
13 7 4 8 12