我必须编写一个程序,通过查找相互 两个数的主要因素。 该程序将打印两个给定数字的素数的两个列表,最后一行将写一个包含互数字的列表。
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
ArrayList <Integer> LIST1=new ArrayList<Integer>();
ArrayList <Integer> LIST2=new ArrayList <Integer>();
ArrayList <Integer> LIST3=new ArrayList <Integer>();
int a=in.nextInt();
int b=in.nextInt();
int i;
for(i=2;i<=a;i++){
while(a%i==0){ LIST1.add(i);
a=a/i;}
}
int j;
for(j=2;j<=b;j++){
while(b%j==0){
LIST2.add(j);
b=b/j;
}
}
int p = LIST1.size();
int q = LIST2.size();
int MIN=Math.min(p,q);
int k;
for(k=0;k<=MIN-1;k++){
int m;
for(m=0;m<=MIN-1;m++){
if(LIST1.get(k)==LIST2.get(m)){
int c=LIST1.get(k);
LIST3.add(c);
}
}
}
System.out.println(LIST1);
System.out.println(LIST2);
System.out.println(LIST3);
}
答案 0 :(得分:0)
对我来说,找到a
和b
的主要因素似乎是可以的。
但是寻找共同因素的逻辑可能是错误的。尝试使用例如24和40,并一步一步完成LIST3
集合部分。您多久将因子2收集到结果中?由于GCD为8,因此您应该将因子2精确地计算三遍。在两个列表的公共子集中查找元素可能不止一次出现可能很棘手。
以素数为键,计数为值,将素数收集到List
中而不是收集到Map
中可能更容易。如果您以前没有使用过Map
,那么绝对值得学习该数据结构。
P.S。当程序正常运行时,建议您将其发布在https://codereview.stackexchange.com/上,在这里我们可以为您提供一些不适合Stackoverflow的编码样式的有用提示。