-2

我正在尝试编写一个打印所有素因子的程序,并从用户输入中指定数字的最小素因子。(例如,如果给出 12,则质因数是 2、2 和 3。)我进行了一些搜索,但所有能记住所有质因数的程序的结果似乎都使用 <>。由于某种原因,这无法识别。我想知道是否有其他方法可以解决这个问题?

编辑:我已经成功打印了最低因子,但在打印所有素因子时仍然遇到问题。编辑代码:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class PrimeFactor {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner in = new Scanner(System.in);
    System.out.println("Please enter an integer");
    long n = in.nextLong();
    System.out.println("Smallest prime factor of "+n+" is "+leastFactor(n));
}

public static ArrayList<Integer> leastFactor(long n) {
    ArrayList primeFactors = new ArrayList<Integer>();
    for (int i=2; i<=n; i++) {
        if (n%i==0) {
            primeFactors.add(i);
        }
    }

    if(primeFactors.size() > 0){
        return (primeFactors);
    }
}
}
4

3 回答 3

0

以下修改修复了您的代码。注意Set<Integer>. 您需要添加type将包含在Set. 只是简写,<>所以你不必重复Integer。换句话说,您可以执行以下任一操作:

Set<Integer> primeFactors = new HashSet<>();

或者:

Set<Integer> primeFactors = new HashSet<Integer>();

这是您修改后的代码:

import java.util.Scanner;
import java.util.HashSet;
import java.util.Set;
public class PrimeFactor {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);
        System.out.println("Please enter an integer");
        int input = sc.nextInt();
        System.out.println(leastFactor(input));
    }

    public static int leastFactor(int input) {
        Set<Integer> primeFactors = new HashSet<>();
        for (int i=2; i<=input; i++) {
            if (input%i==0) {
                primeFactors.add(i);
            }
        }

        if(primeFactors.size() > 0){
            return primeFactors.toArray(new Integer[primeFactors.size()])[0];
        }
        return 1;
    }
}

现在您的 primeFactors 已被填充。我添加了对 primeFactors 大小的附加检查,如果它有元素,则返回第一个元素,这将是最小的。如果没有元素,则返回 1

于 2016-02-28T05:35:51.610 回答
0
Scanner z = new Scanner(System.in);
//int n;
long n;//long to display all prime factors.
List primefactors = new ArrayList():
System.out.print("Enter a Number : ");
//n= z.nextInt();
n = z.nextLong();
System.out.print("The Prime Factors of "+n+" are : "); 
int i=2;
while(n>1)
  {
   if(n%i == 0)
    {
     primefactors.add(i);
     n=n/i;
    }
   else
    i++;
  }
System.out.println(Collections.min(primefactors));
primefactors.forEach(System.out::println);//to display all values

希望你发现我的代码很有用。

于 2016-02-28T05:38:00.013 回答
0

顺便说一句:您可以通过更改上循环值轻松提高代码的速度

for (int i=2; i<=input; i++) {
...
}

从你的平方根input

int upper = Math.round(Math.sqrt(input));
for (int i = 2; i < upper; i++) {
...
}
于 2016-02-28T05:48:49.533 回答