试题 算法训练 素因子去重

    资源限制
    时间限制:1.0s 内存限制:256.0MB
    问题描述
      给定一个正整数n,求一个正整数p,满足p仅包含n的所有素因子,且每个素因子的次数不大于1
    输入格式
      一个整数,表示n
    输出格式
      输出一行,包含一个整数p。
    样例输入
    1000
    样例输出
    10
    数据规模和约定
      n<=10^12
      样例解释:n=1000=2^3_5_3,p=2*5=10

    1. #include <iostream>
    2. #include <map>
    3. #include <cmath>
    4. typedef long long ll;
    5. using namespace std;
    6. int main() {
    7. ll n;
    8. cin >> n;
    9. map<ll, int> num;
    10. while (n % 2 == 0) {
    11. num[2]=1;
    12. n /= 2;
    13. }
    14. for (ll i = 3; i <= sqrt(n * 1.0); i += 2) {
    15. while (n % i == 0) {
    16. num[i]=1;
    17. n /= i;
    18. }
    19. }
    20. if (n > 2) {
    21. num[n]=1;
    22. }
    23. ll ans=1;
    24. for (map<ll, int>::iterator it = num.begin(); it != num.end(); ++it){
    25. ans *= it->first;
    26. }
    27. cout<<ans;
    28. return 0;
    29. }

    map、迭代器、