------------只要够努力,人生最坏的结局不过是大器晚成!!!

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
 
思路:注意到数据范围,首先确定是用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;
	}
	
}

  

posted on 2019-02-04 10:02  ystraw  阅读(640)  评论(0编辑  收藏  举报

不经一番切孤寒,怎得梅花扑鼻香