fork(2) download
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<vector>
  5. #include<string>
  6.  
  7.  
  8.  
  9. using namespace std;
  10.  
  11. int rem(string str, int a){
  12. if (str.empty())
  13. {
  14. return 0;
  15. }
  16. int temp = (str[str.length() - 1] - '0') % a;
  17. int temp2 = 10 % a;
  18. str.erase(str.length() - 1);
  19. int temp3 = (rem(str, a)*temp2) % a;
  20. return (temp3 + temp) % a;
  21. }
  22.  
  23.  
  24. int gcdf(int a, int b)
  25. {
  26. return b ? gcdf(b, a%b) : a;
  27. }
  28.  
  29.  
  30. int main(){
  31. string str;
  32. while (cin >> str)
  33. {
  34.  
  35. size_t l = str.length();
  36. vector<int> digit;
  37. int sum = 0;
  38. int frequency[9];
  39. for (int i = 0; i<9; i++)
  40. frequency[i] = 0;
  41. int zero_sum = 0;
  42. for (size_t i = 0; i < l; i++)
  43. {
  44. if (str.at(i) != '0')
  45. {
  46. frequency[str.at(i) - '1']++;
  47. sum += str.at(i) - '0';
  48. }
  49. else
  50. {
  51. zero_sum++;
  52. }
  53. }
  54.  
  55. for (size_t i = 0; i < 9; i++)
  56. {
  57. if (frequency[i])
  58. {
  59. digit.push_back(i + 1);
  60. }
  61. }
  62. int gcds = 0, gcd = 1;
  63. for (size_t i = 0; i < digit.size(); i++)
  64. {
  65. gcds = gcdf(digit[i], gcds);
  66. }
  67. if (gcdf(3, gcds) == 1)
  68. {
  69. gcd *= gcds;
  70. }
  71. if (gcds == 6)
  72. {
  73. gcd *= 2;
  74. }
  75. if ((rem(str, 81) == 0) && (gcdf(gcds, 3) == 3))
  76. {
  77. gcd *= 81;
  78. }
  79. else
  80. {
  81. if ((rem(str, 27) == 0) && (gcdf(gcds, 3) == 3))
  82. {
  83. gcd *= 27;
  84. }
  85. else
  86. {
  87. if (sum % 9 == 0)
  88. {
  89. gcd *= 9;
  90. }
  91. else
  92. {
  93. if (sum % 3 == 0)
  94. {
  95. gcd *= 3;
  96. }
  97. }
  98. }
  99. }
  100. if((digit.size()==1)&&(zero_sum==0))
  101. cout<<str;
  102. else
  103. cout << gcd << endl;
  104.  
  105.  
  106. }
  107. return 0;
  108. }
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
Success #stdin #stdout 0s 2824KB
stdin
44
stdout
44