12-算法训练 素因子去重
Posted zhumengdexiaobai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了12-算法训练 素因子去重相关的知识,希望对你有一定的参考价值。
http://lx.lanqiao.cn/problem.page?gpid=T513
算法训练 素因子去重
时间限制:1.0s 内存限制:256.0MB
问题描述
给定一个正整数n,求一个正整数p,满足p仅包含n的所有素因子,且每个素因子的次数不大于1
输入格式
一个整数,表示n
输出格式
输出一行,包含一个整数p。
样例输入
1000
样例输出
10
数据规模和约定
n<=10^12
样例解释:n=1000=2^3*5*3,p=2*5=10
样例解释:n=1000=2^3*5*3,p=2*5=10
思路:注意到数据范围,首先确定是用long 类型,然后考虑到其实无需用到素数的判断,因为我是从2开始判断的,
所以每次都会将能除开的数除尽,根本不会有合数,同时注意到每次处理完,n都在变小,所以不是非要循环到原始的
n, 而是当前的最大值,因为的它的素因子最大只能是自己。
import java.util.Scanner; import java.math.*; public class Main { public static void main(String[] args) { Scanner cin = new Scanner(System.in); // long n = cin.nextInt(); long n = cin.nextLong(); long ans = 1; long x = n; for(long i = 2; i <= x; i++) { if(x % i == 0) { // if(x % i == 0 && isPrime(i)) { ans *= i; } while(x % i == 0) { x /= i; } } System.out.println(ans); } public static boolean isPrime(long x) { for(long i = 2; i <= Math.sqrt(x); i++) { if(x % i == 0) return false; } return true; } }
以上是关于12-算法训练 素因子去重的主要内容,如果未能解决你的问题,请参考以下文章
丑数 二 ---- 设计一个算法,找出只含素因子`2`,`3`,`5` 的第 n 小的数