2016-02-28 78 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++) { 
... 
}