func_code_string: #include <bits/stdc++.h>   using namespace std;   const double pi = acos(-1.0);   const double eps = 1e-7;   const long long MOD = 1000000007LL;   const int INF = 0x3f3f3f3f;   const int _NAN = -0x3f3f3f3f;   const double EULC = 0.5772156649015328;   const int NIL = -1;   template <typename T>   void read(T &x) {     x = 0;     char ch = getchar();     long long f = 1;     while (!isdigit(ch)) {       if (ch ==  - ) f *= -1;       ch = getchar();     }     while (isdigit(ch)) {       x = x * 10 + ch - 48;       ch = getchar();     }     x *= f;   }   const int maxn = 1e7 + 10;   bool isprime[maxn] = {1, 1};   int prime[maxn], kase;   vector<long long> ve;   long long ls[12] = {0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024};   int ans;   void primeMaker() {     for (int i = 2; i < maxn; ++i) {       if (!isprime[i]) prime[kase++] = i;       for (int j = 0; j < kase && prime[j] * i < maxn; ++j) {         isprime[i * prime[j]] = true;         if (!(i % prime[j])) break;       }     }   }   int solve(long long &n) {     long long t2 = n;     int __max = -1;     for (int i = 0; i < kase && prime[i] <= t2; ++i) {       if (!(t2 % prime[i])) {         int cnt = 0;         while (!(t2 % prime[i])) {           ++cnt;           t2 /= prime[i];         }         if (__max != -1 && __max != cnt) ++ans;         __max = max(__max, cnt);         ve.push_back(prime[i]);       }     }     if (ans) ans = 1;     if (__max == -1) __max = 1;     for (int i = 0; i < 10; ++i) {       if (__max == ls[i]) break;       if (__max > ls[i] && __max < ls[i + 1]) {         __max = ls[i + 1];         if (ans != 1) ++ans;         break;       }     }     n = 1;     if (!ve.empty()) {       for (auto num : ve) n *= num;     }     return __max;   }   int main(void) {     primeMaker();     long long n;     while (~scanf( %lld , &n)) {       ans = 0;       if (!isprime[n]) {         printf( %lld %d n , n, 0);         continue;       }       int res = solve(n);       ans += log2l(res) + eps;       printf( %lld %d n , n, ans);       ve.clear();     }     return 0;   }   