一.题目
问题描述
给定一个正整数n,求一个正整数p,满足p仅包含n的所有素因子,且每个素因子的次数不大于1
输入格式
一个整数,表示n
输出格式
输出一行,包含一个整数p。
样例输入
1000
样例输出
10
数据规模和约定
n<=10^12
样例解释:n=1000=2^3*5*3,p=2*5=10
样例解释: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; }