问题描述
给定一个正整数n,求一个正整数p,满足p仅包含n的所有素因子,且每个素因子的次数不大于1
输入格式
一个整数,表示n
输出格式
输出一行,包含一个整数p。
样例输入
1000
样例输出
10
数据规模和约定
n<=10^12
样例解释:n=1000= 2 ^3 * 5 ^3,p=2*5=10
思路:
求出这个正整数的所有素因子,重复的素因子只算做一个,然后相乘
import java.util.Scanner;
public class 素因子去重 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long n = sc.nextLong();
long p = 1;
for (int i = 2; i <= Math.sqrt(n); i++) {
// 判断这个数是否是素因子
boolean bool = false;
while (n % i == 0) {
n /= i;
bool = true;
// System.out.println(i +" "+n);
}
//最后素因数就是本身或者是质数的话结束循环
if (n == i)
break;
if (bool) {
p *= i;
}
}
// 得出的p的值
System.out.println(p * n);
}
}