#include int prime[1000000]; int count[1000000]; long long pow(int x,int n){ long long ans = 1; for(int i = 0;i < n;i++){ ans *= x; } return ans; } main(){ prime[0] = 1; prime[1] = 1; for(int i = 2;i*i <= 1000000;i++){ if(prime[i])continue; for(int j = i*2;j <= 1000000;j+=i){ prime[j] = 1; } } long long X; scanf("%lld",&X); loop: for(int i = 2;i < 1000000;i++){ if(!prime[i] && X%i==0){ count[i]++; X/=i; goto loop;//1回も割れないときループを抜ける } } long long sum = 1; for(int i = 2;i < 1000000;i++){ sum *= pow(i,count[i]%2); } printf("%lld\n",sum*X); }