fork download
  1. #include <iostream>
  2. #include <string.h>
  3. using namespace std;
  4.  
  5. int primes[1000];
  6. int count=0;
  7.  
  8. void generateSieve(){
  9. bool arr[1000];
  10. memset(arr,1,sizeof(arr));
  11. for(int i=4;i<1000;i+=2)
  12. arr[i] = 0;
  13. for(int i=3;i<1000;i+=2){
  14. for(int j=i*2;j<1000;j+=i)
  15. arr[j] = 0;
  16. }
  17. for(int i=2;i<1000;i++){
  18. if(arr[i]==1){
  19. primes[count]=i;
  20. count++;
  21. }
  22. }
  23. }
  24.  
  25. int main() {
  26. generateSieve();
  27. int T,x,temp,temp2,temp3,arr[10]={0},arr2[10]={0},arr3[3]={0};;
  28. string num;
  29. bool prime;
  30. cin>>T;
  31. for(int i=0;i<T;i++){
  32. cin>>num;
  33. prime = false;
  34. for(int j=0;j<num.length();j++)
  35. arr[(int)num[j]-48]++;
  36. for(int j=0;j<10;j++)
  37. cout<<arr[j]<<" ";
  38. cout<<endl;
  39. for(int j=count-1;count>=0;j--){
  40. x=primes[j];
  41. if(x==0)
  42. break;
  43. for(int k=0;k<3;k++){cout<<x<<" "<<arr[x%10]<<endl;
  44. if(arr[x%10]>0){
  45. //save value states
  46. if(k==0){
  47. temp=x%10;
  48. arr2[temp] = arr[temp];
  49. }
  50. if(k==1){
  51. temp2=x%10;
  52. if(arr2[temp2] == 0)
  53. arr2[temp2] = arr[temp2];
  54. }
  55. if(k==2){
  56. temp3=x%10;
  57. if(arr2[temp3] == 0)
  58. arr2[temp3] = arr[temp3];
  59. }
  60. arr3[k] = x%10;
  61. arr[x%10]--;
  62. }
  63. else {
  64. if(k==1)
  65. arr[temp] = arr2[temp];
  66. if(k==2){
  67. arr[temp] = arr2[temp];
  68. arr[temp2] = arr2[temp2];
  69. }
  70. break;
  71. }
  72. x/=10;
  73. if(x==0){
  74. if(k==0)
  75. arr[temp] = arr2[temp];
  76. if(k==1){
  77. arr[temp] = arr2[temp];
  78. arr[temp2] = arr2[temp2];
  79. }
  80. if(k==2){
  81. arr[temp] = arr2[temp];
  82. arr[temp2] = arr2[temp2];
  83. arr[temp3] = arr2[temp3];
  84. }
  85. temp = -10;
  86. temp2=-5;
  87. temp3=-1;
  88. //check the order of number in string
  89. for(int l=0;l<num.length();l++){
  90. if((int)num[l]-48 == arr3[2] && temp3==-1)
  91. temp3 = l;
  92. else if((int)num[l]-48 == arr3[1] && temp2<temp3)
  93. temp2 = l;
  94. else if((int)num[l]-48 == arr3[0])
  95. temp = l;cout<<temp3<<" "<<temp2<<" "<<temp<<endl;
  96. }
  97. if(k==0){
  98. prime = true;
  99. break;
  100. }
  101. if(k==1){
  102. if(temp2<temp){
  103. prime = true;
  104. break;
  105. }
  106. }
  107. if(k==2){
  108. if(temp3 < temp2 && temp2 < temp){
  109. prime = true;
  110. break;
  111. }
  112. }
  113. break;
  114. }
  115. }
  116. memset(arr2,0,sizeof(arr2));
  117. if(prime){
  118. cout<<primes[j]<<endl;
  119. break;
  120. }
  121. }
  122. if(!prime)
  123. cout<<"-1"<<endl;
  124. memset(arr,0,sizeof(arr));
  125. }
  126. return 0;
  127. }
Success #stdin #stdout 0s 3424KB
stdin
2
787
877
stdout
0 0 0 0 0 0 0 2 1 0 
997 2
99 0
991 0
983 0
977 2
97 1
9 0
971 0
967 2
96 0
953 0
947 2
94 0
941 0
937 2
93 0
929 0
919 0
911 0
907 2
90 0
887 2
88 1
8 0
883 0
881 0
877 2
87 1
8 1
-1 0 -10
1 0 -10
1 2 -10
863 0
859 0
857 2
85 0
853 0
839 0
829 0
827 2
82 0
823 0
821 0
811 0
809 0
797 2
79 0
787 2
78 1
7 1
0 -5 -10
0 1 -10
0 1 2
787
0 0 0 0 0 0 0 2 1 0 
997 2
99 0
991 0
983 0
977 2
97 1
9 0
971 0
967 2
96 0
953 0
947 2
94 0
941 0
937 2
93 0
929 0
919 0
911 0
907 2
90 0
887 2
88 1
8 0
883 0
881 0
877 2
87 1
8 1
0 -5 -10
0 1 -10
0 1 2
877