质因数,钻石支架的替代品

Prime Factors, Alternative to Diamond Brackets

我正在尝试编写一个程序来打印所有质因数,并指定用户输入的数字的最小质因数。 (例如,如果给定 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);
    }
}
}

以下修改修复了您的代码。注意 Set<Integer>。您需要添加 Set 中将包含的内容的 type 信息。 <> 只是 shorthand,因此您不必重复 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 大小的额外检查,如果它有元素,return 第一个元素,这将是最小的。如果它没有元素,return 1

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

希望我的代码对您有用。

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

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

从您的 input

求平方根
int upper = Math.round(Math.sqrt(input));
for (int i = 2; i < upper; i++) {
...
}