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