2016-02-28 28 views
-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); 
    } 
} 
} 
+1

平方根所以你没有做什么研究<>手段和正确的方式来形成一个类型的Set/HashSet? – pczeus

回答

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 

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

+0

谢谢!这段代码非常有用。有没有一种方法可以显示所有主要因素?因此,它会显示多个2或3等等的更大的数字。 – stuffandthings

+0

在代码中将int转换为long以显示所有可能的组合。我已经为每个循环添加了显示primmefactors arraylist中的所有元素。我希望你得到了所需编辑的答案。谢谢。 – SmashCode

+0

有没有办法可以返回这些数据而不是打印它?我想使用2个独立的方法,并用主要方法调用这个方法。 (参考最后一行。) – stuffandthings

0

以下修改修复了您的代码。请注意0​​。你需要添加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

0

BTW:您可以轻松地提高你的代码速度变化上周期值

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

从您input

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