
@依然菜刀 你好,想跟你请教个问题:
大神,请假一下
题目是这样的
72=2^3*3^2
181944=2^3*3^2*7*19^2
下面是我的代码
package test;
import java.util.ArrayList;
public class Rotating {
public static ArrayList<Integer> getNumber(int n) {
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i = 2; i < n; i++) {
int sum = 1;
for (int j = 1; j <= i; j++) {
if (i % j == 0) {
sum *= j;
}
}
if (sum == i) {
list.add(i);
}
}
return list;
}
public static ArrayList<Integer> getChildNumber(int number) {
ArrayList<Integer> list = new ArrayList<Integer>();
for (int i = 1; i < number; i++) {
if (number % i == 0) {
list.add(i);
}
}
return list;
}
public static ArrayList<Integer> getPrimeNumber(ArrayList<Integer> list, ArrayList<Integer> al) {
ArrayList<Integer> arr = new ArrayList<Integer>();
for (int i = 0; i < list.size(); i++) {
for (int j = 0; j < al.size(); j++) {
for (int j2 = 0; j2 < j; j2++) {
if (Math.pow(al.get(j), al.get(j2)) == list.get(i)) {
if (!arr.contains(al.get(j))) {
arr.add(al.get(j));
}
if (!arr.contains(al.get(j2))) {
arr.add(al.get(j2));
}
}
}
}
}
return arr;
}
public static void main(String[] args) {
int n = 181944;
ArrayList<Integer> al = Rotating.getNumber(n);
// System.out.println(al);
ArrayList<Integer> list = Rotating.getChildNumber(n);
// System.out.println(list);
ArrayList<Integer> arr = new ArrayList<Integer>();
arr = Rotating.getPrimeNumber(list, al);
System.out.println(arr);
}
}
我不知道我的思路有没有错
还有就是数字变大后,运行时间会变成长,能不能帮我优化一下