#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define FOR(I,A,B) for(int I = (A); I < (B); ++I) typedef long long ll; const ll MAX = 10000007; bool isPrime[MAX]; vector prime; void makePrime(){ for (ll i = 0; i < MAX; i++){ isPrime[i] = true; } isPrime[0] = isPrime[1] = false; for (ll i = 2; i * i < MAX + 1; i++){ if(isPrime[i]){ for (ll j = 2 * i; j < MAX; j += i) { isPrime[j] = false; } } } FOR(i,0,MAX){ if(isPrime[i]) prime.push_back(i); } return; } int main(){ ll x; cin >> x; ll y = 1; makePrime(); int p = 0; ll xx = x; int j = 10000; while(j > 0){ int cnt = 0; while(xx % prime[p] == 0){ xx /= prime[p]; cnt++; } if(cnt % 2 == 1) y *= prime[p]; p++; j--; if(xx == 1) break; } if(xx > 1){ y *= xx; } printf("%lld\n", y); return 0; }