Algo190 算法训练 素因子去重
题目如下:
这道题的意思就是给你一个数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
* @