试题 算法训练 素因子去重

一.题目

 

问题描述

 

  给定一个正整数n,求一个正整数p,满足p仅包含n的所有素因子,且每个素因子的次数不大于1

 

输入格式

 

  一个整数,表示n

 

输出格式

 

  输出一行,包含一个整数p。

 

样例输入

 

1000

 

样例输出

 

10

 

数据规模和约定

 

  n<=10^12
  样例解释:n=1000=2^3*5*3,p=2*5=10

二.解决

思路:用数组存储n的素因子,然后对数组去重,最后答案就是去重后的数组元素相乘。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n,ans=1;
ll a[110];
int main(){
    cin>>n;
    ll i=2;
    int t=0;
    while(i*i<n){ //获得素因子 
        if(n%i==0) a[t++]=i;
        while(n%i==0){ //使用该数的因数对该数进行分解 
            n=n/i;
        }
        i++;
    }
    a[t++]=n;
    t=unique(a,a+t)-a;//数组去重后的数组元素个数 
    for(int i=0;i<t;i++){ //输出前t个元素,注意unique函数并没有删除重复数字,只是把重复数字放到后面而已 
        ans*=a[i];
    }
    cout<<ans<<endl;
}

 

 
 

 

posted @ 2020-04-30 21:53  saaas  阅读(220)  评论(0)    收藏  举报