通过分解为主要因子来找到GCD

时间:2018-12-18 12:15:01

标签: java greatest-common-divisor

我必须编写一个程序,通过查找相互  两个数的主要因素。 该程序将打印两个给定数字的素数的两个列表,最后一行将写一个包含互数字的列表。

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);
    }

1 个答案:

答案 0 :(得分:0)

对我来说,找到ab的主要因素似乎是可以的。

但是寻找共同因素的逻辑可能是错误的。尝试使用例如24和40,并一步一步完成LIST3集合部分。您多久将因子2收集到结果中?由于GCD为8,因此您应该将因子2精确地计算三遍。在两个列表的公共子集中查找元素可能不止一次出现可能很棘手。

以素数为键,计数为值,将素数收集到List中而不是收集到Map中可能更容易。如果您以前没有使用过Map,那么绝对值得学习该数据结构。

P.S。当程序正常运行时,建议您将其发布在https://codereview.stackexchange.com/上,在这里我们可以为您提供一些不适合Stackoverflow的编码样式的有用提示。