蓝桥杯练习系统中的算法训练第一题
**题目描述:**给定一个正整数n,求一个正整数p,满足p仅包含n的所有素因子,且每个素因子的次数不大于1。
我看到题的第一反应: …这是不是要我因式分解呀,然后找到因式中所有的素数然后将他们相乘,但是我好像不知道怎样因式分解,判断素数我也只会最简单粗鲁的方法,题目给定的数字这么大,肯定要超时的嘛。然后我就去请教大佬了。
**算法思路:**根据我上面的思路,我们先要因式分解,但是第二步可以在第一步就解决掉,毕竟判断素数还是挺麻烦的。在因式分解时,我们要去掉相同的因子(这一步也是点睛之笔),就比如说给定的数字可以被2整除,那我们先将2放到一个集合中,然后n/2,用一个while循环,一直用n除以2直到除不尽了为止,这样就去掉重复的2这个因子,这样其实我们放到集合中的因子就不会出现合数了,全都是素数,你想如果因子中有合数,那合数也可以分解为两个素数相乘。最后我们只需要将集合中的数相乘即可得到答案。
代码实现:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
//素因子去重
public class Main_primedistict {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
long n=scanner.nextLong(); //这里用long存储
int result=1;
List<Integer> l