算法训练 素因子去重
时间限制: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
样例解释:n=1000=2^3*5^3,p=2*5=10
可以根号n的复杂度去模拟,
其实隐含了一个素数筛,
最后乘以操作后的n
1 #include <iostream> 2 #define ll long long int 3 using namespace std; 4 ll n; 5 ll m = 1; 6 7 int main(){ 8 ios::sync_with_stdio(false); 9 cin.tie(0); 10 cout.tie(0); 11 cin >> n; 12 for(ll i = 2; i*i <= n; i++){ 13 if(n%i == 0){ 14 m *= i; 15 while(n%i == 0){ 16 n /= i; 17 } 18 } 19 } 20 cout << m*n <<endl; 21 return 0; 22 }