l199616j
问题描述
  给定一个正整数n,求一个正整数p,满足p仅包含n的所有素因子,且每个素因子的次数不大于1
 
输入格式
  一个整数,表示n
 
输出格式
  输出一行,包含一个整数p。
 
样例输入
1000
 
样例输出
10
 
数据规模和约定
  n<=10^12

样例解释:n=1000=2^3*5*3,p=2*5=10
 
 
思路分析
i从2到n遍历一遍
1. 判断i是否是n的因子并且是素数
2. 如果是素因子,则利用while循环,一直除以i来去重,素因子去重后,将素因子添加到集合中,i++,重复第1
3. 如果不是素因子,i++,重复第1
4. 循环结束后,将集合里的所有素因子相乘,即得到p
 
java 代码如下:
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Long n = new Scanner(System.in).nextLong();
        ArrayList<Long> list = new ArrayList<Long>();
        //从2到n找素因子
        for (long i = 2; i <= n; i++) {
            //i是素因子
            if(n%i==0 && juge(i)){
                //素因子去重
                while(n%i==0){
                    n/=i;
                }
                
                //将素因子添加到集合
                list.add(i);
                if(n<i)
                    break;
            }
        }
        
        long p = 1;
        //将所有素因子相乘,得出最后结果p
        for (int i = 0; i < list.size(); i++) {
            p*=(long)list.get(i);
        }
        System.out.println(p);
    }
    
    //判断因子是否是素数
    public static boolean juge(long m){
        int sqrt = (int) Math.sqrt(m);
        for (int i = 2; i <= sqrt; i++) {
            if(m%i==0)
                return false;
        }
        return true;
    }
}

 

分类:

算法

技术点:

相关文章:

  • 2021-07-08
  • 2020-04-17
  • 2021-07-05
  • 2021-07-13
  • 2021-08-26
  • 2021-12-19
  • 2021-08-03
  • 2021-08-18
猜你喜欢
  • 2021-07-31
  • 2021-06-11
  • 2021-04-26
  • 2021-12-05
  • 2022-01-11
  • 2021-08-07
  • 2021-05-09
相关资源
相似解决方案