给定一个正整数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.