蓝桥杯 算法训练 素因子去重 java

Algo190 算法训练 素因子去重

题目如下:
image-20200717155143001

这道题的意思就是给你一个数n,然后要把n的所有的素因子提取出来相乘一下即可

素因子其实就是因子+素数的意思。因子是什么就不说了,而素数的含义是:某个数的因数如果只有1和其本身,那么其就是素数。比如2 ,3 ,5 ,7等等

比如样例1000,他的因子多了去了,比如1,2,4,5,8,10等等,但其中是素数的就只有2和5,所以p就是2*5=10

我说下我的解题思路,首先想到了暴力,直接来个循环,从2到n循环判断是不是因子,如果是因子再判断下是不是素数。但一看到n<=10^12。心直接凉了,那只能想办法优化下了,暴力还是要暴力的,但也要有智慧的暴力。

仔细想了一下,为什么要从2到n呢,这里有一大半是没必要的,只需要 2 到 √n(根号n)就行

举个例子 16,可以等于 1 * 16 ,2 * 8,4 * 4,8 * 2,16 * 1,发现没,从4 * 4开始就没意义了,只是与前半部分相反而已

开个根号后就是 <= 10^6了,那就随便折腾了,具体看下代码吧

package algo;

import java.util.Scanner;

/**
 * @Description: 算法训练 素因子去重
 * @ClassName: Algo190
 * @author: fan.yang
 * @
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值