#include #include #include #include using namespace std; bool is_prime(int num) { if (num == 1) return false; if (num == 2) return true; for (int i = 3; i < std::sqrt(num); i += 2) if (num % i == 0) return false; return true; } //void rec ( string a, int& b, int c ){ // // if ( !is_prime(stoi( a ) ) ){ // return; // } // // set< int > tmp; // // c = c + is_prime( stoi( a ) ); // // if ( a.length() == 1 ){ // if ( c > b ) { // b = c; // } // return; // } // // for ( int i = 0; i < a.length(); i++ ){ // string tmpstr; // for ( int x = 0; x < a.length(); x++ ){ // if ( x != i ){ // tmpstr.push_back( a[ x ] ); // } // } // tmp.insert(stoi(tmpstr) ); // } // for ( auto x : tmp ){ // rec(to_string(x), b, c ); // } //} using STATE = int; set visited; int max_val = 0; void rec(STATE num, int count, int depth) { if (!num || (!is_prime(num) && depth)) { max_val = max(count - 1, max_val); return; } string num_str = to_string(num); for (int i = 0; i < num_str.size(); i++) { string new_num(num_str.erase(i, 1)); STATE new_state = new_num.size() ? stoi(new_num) : 0; if (visited.find(new_state) == visited.end()) { visited.insert(new_state); rec(new_state, count + 1, depth + 1); } } } int main() { // int a, b = 0; // cin >> a; // rec (to_string( a ), b, 0 ); // cout << b << endl; int num; cin >> num; rec(num, is_prime(num), 0); cout << max_val << '\n'; return 0; }