zoukankan      html  css  js  c++  java
  • 蓝桥杯 算法训练 素因子去重 (java)

    问题描述
      给定一个正整数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;
        }
    }
  • 相关阅读:
    angularjs学习笔记—事件指令
    JS编写点击页面弹出被点击的标签名
    对数据进行排序
    springBoot集成seata
    maven打包时根据不同的环境生成不同的jar包名称
    单列模式-双重锁校验解析
    hashmap原理简述
    Linux搭建disconf(二)
    Linux搭建dubbo-admin 分布式服务监控中心
    Linux安装zookeeper
  • 原文地址:https://www.cnblogs.com/l199616j/p/10584655.html
Copyright © 2011-2022 走看看