素因子去重之int与long百感交集(Java)

给定一个正整数n,求一个正整数p,满足p仅包含n的所有素因子,且每个素因子的次数不大于1

首先,本来一道比较简单的题,没有考虑细节,就成了难题,是很过不去的一件事。
在这里插入图片描述
害,心态要好,不然吃亏的还是自己。

第一次做的:

public class DuplicateRemoval {
    
    
	// 第一次做的,90分
	public static void main(String[] args) {
    
    
		Scanner input = new Scanner(System.in);
		int n = input.nextLong();
		int b = 2;
		HashSet<Integer> set = new HashSet<Integer>();
		while (n != 1) {
    
    
			if (n % b == 0) {
    
    
				n = n / b;
				set.add(b);
				b=2;
			} else {
    
    
				b++;
			}
		}
		int p = 1;
		List<Integer> list = new ArrayList<Integer>();
		list.addAll(set);
		for (int i = 0; i < list.size(); i++)
			p *= list.get(i);
		System.out.println(p);

	}
}

后来过的:

改成long就过了!!

public class Main {
    
    
	public static void main(String[] args) {
    
    
		Scanner input = new Scanner(System.in);
		long n = input.nextLong();
		int b = 2;
		HashSet<Integer> set = new HashSet<Integer>();
		while (n != 1) {
    
    
			if (n % b == 0) {
    
    
				n = n / b;
				set.add(b);
				b = 2;
			} else {
    
    
				b++;
			}
		}
		int p = 1;
		List<Integer> list = new ArrayList<Integer>();
		list.addAll(set);
		for (int i = 0; i < list.size(); i++)
			p *= list.get(i);
		System.out.println(p);

	}
}

总结:只能说刷的题不够多,细节的地方没有好好考虑。其实我看了一下数据范围,但是我没有放在心上,对不起,是我低估了10^12的大小,我错了,我反思,我悔过。

n<=10^12  想想int 的最大值 2147483648才十位!!!
9^12为282,429,536,481多少位!!12位
更何况你的10^12呢!

end.

猜你喜欢

转载自blog.csdn.net/weixin_44998686/article/details/108853167