• Source
    1. #include <iostream>
    2. #include <vector>
    3. #include <algorithm>
    4. #include <math.h>
    5. using namespace std;
    6.  
    7. int ktcp (long long x)
    8. {
    9. long long so=sqrt(x);
    10. if (so*so==x) return 1;
    11. else return 0;
    12. }
    13.  
    14. int kt (long long x)
    15. {
    16. for (long long i=1; i<=sqrt(x); i++)
    17. {
    18. if (x%i==0)
    19. {
    20. if (ktcp(i)==1 && sqrt(i)>1) return 0;
    21. if (ktcp(x/i)==1 && sqrt(x/i)>1) return 0;
    22. }
    23. }
    24. return 1;
    25. }
    26.  
    27. int main ()
    28. {
    29. long long n;
    30. cin>>n;
    31. vector <long long> uoc;
    32. for (long long i=1; i<=sqrt (n); i++)
    33. {
    34. if (n%i==0)
    35. {
    36. if (i!=sqrt (n))
    37. {
    38. uoc.push_back(i);
    39. uoc.push_back(n/i);
    40. }
    41. else
    42. {
    43. if (ktcp(n)==1)
    44. {
    45. uoc.push_back(i);
    46. }
    47. else
    48. {
    49. uoc.push_back(i);
    50. uoc.push_back(n/i);
    51. }
    52. }
    53. }
    54. }
    55. sort (uoc.begin(), uoc.end());
    56. for (long long i=uoc.size()-1; i>=0; i--)
    57. {
    58. if (kt(uoc[i])==1)
    59. {
    60. cout<<uoc[i];
    61. break;
    62. }
    63. }
    64. return 0;
    65. }