fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int main() {
  5. vector<int> numbers = {5, 7, 9, 11, 15, 23};
  6. int evenCount = 0;
  7.  
  8. // Count even numbers
  9. for (int num : numbers) {
  10. if (num % 2 == 0) {
  11. evenCount++;
  12. }
  13. }
  14.  
  15. if (evenCount >= 2) {
  16. int result = 0;
  17. cout << result << endl;
  18. }
  19. else if (evenCount == 1) {
  20. int result = 1;
  21. cout << result << endl;
  22. }
  23. else {
  24. int result = 2;
  25. int maxDivisor = 1;
  26. unordered_map<int, int> divisorCount;
  27.  
  28. // Count all divisors for each element
  29. for (int num : numbers) {
  30. for (int d = 1; d * d <= num; d++) {
  31. if (num % d == 0) {
  32. if (d == num / d) {
  33. divisorCount[d]++;
  34. } else {
  35. divisorCount[d]++;
  36. divisorCount[num / d]++;
  37. }
  38. }
  39. }
  40. }
  41.  
  42. // Check for common divisors
  43. for (auto &entry : divisorCount) {
  44. if (entry.second > 1 && entry.first > maxDivisor) {
  45. maxDivisor = entry.first;
  46. }
  47. }
  48.  
  49. if (maxDivisor > 1) {
  50. result = 0;
  51. cout << result << endl;
  52. }
  53. else {
  54. for (int num : numbers) {
  55. // Remove divisors of num temporarily
  56. for (int d = 1; d * d <= num; d++) {
  57. if (num % d == 0) {
  58. if (divisorCount[d] == 1) divisorCount.erase(d);
  59. else divisorCount[d]--;
  60.  
  61. if (d != num / d) {
  62. int other = num / d;
  63. if (divisorCount[other] == 1) divisorCount.erase(other);
  64. else divisorCount[other]--;
  65. }
  66. }
  67. }
  68.  
  69. // Check if num+1 shares a divisor > 1
  70. bool found = false;
  71. for (int d = 1; d * d <= num + 1; d++) {
  72. if ((num + 1) % d == 0) {
  73. if ((divisorCount.count(d) && d > 1) ||
  74. (divisorCount.count((num + 1) / d) && (num + 1) / d > 1)) {
  75. result = 1;
  76. found = true;
  77. break;
  78. }
  79. }
  80. }
  81.  
  82. if (found) {
  83. cout << result << endl;
  84. return 0;
  85. }
  86.  
  87. // Reinsert divisors back
  88. for (int d = 1; d * d <= num; d++) {
  89. if (num % d == 0) {
  90. divisorCount[d]++;
  91. if (d != num / d)
  92. divisorCount[num / d]++;
  93. }
  94. }
  95. }
  96.  
  97. if (result == 2) {
  98. cout << result << endl;
  99. }
  100. }
  101. }
  102. return 0;
  103. }
  104.  
Success #stdin #stdout 0.01s 5320KB
stdin
6
2
1 1
1 1
2
4 8
1 1
5
1 1 727 1 1
1 1 1 1 1
2
3 11
1 1
3
2 7 11
1 1 1
3
7 12 13
1 1 1
stdout
0