How to determine java number

I need to decompose a number, like 24 into 1,2,2,2,3. My method for this is:

static int[] factorsOf (int val) { int index = 0; int []numArray = new int[index]; System.out.println("\nThe factors of " + val + " are:"); for(int i=1; i <= val/2; i++) { if(val % i == 0) { numArray1 [index] = i; index++; } } return numArray; } 

however it does not work. Can someone help me with this?

+4
source share
5 answers

You have a few errors, you cannot create an int array without size. Instead, I used a list of arrays.

 static Integer[] factorsOf(int val) { List<Integer> numArray = new ArrayList<Integer>(); System.out.println("\nThe factors of " + val + " are:"); for (int i = 2; i <= Math.ceil(Math.sqrt(val)); i++) { if (val % i == 0) { numArray.add(i); val /= i; System.out.print(i + ", "); } } numArray.add(val); System.out.print(val); return numArray.toArray(new Integer[numArray.size()]); } 

A complete program using int [] as per your request.

 public class Test2 { public static void main(String[] args) { int val = 5; int [] result = factorsOf(val); System.out.println("\nThe factors of " + val + " are:"); for(int i = 0; i < result.length && result[i] != 0; i ++){ System.out.println(result[i] + " "); } } static int[] factorsOf(int val) { int limit = (int) Math.ceil(Math.sqrt(val)); int [] numArray = new int[limit]; int index = 0; for (int i = 1; i <= limit; i++) { if (val % i == 0) { numArray[index++] = i; val /= i; } } numArray[index] = val; return numArray; } } 
+7
source

A working example

 public class Main { public static void main(String[] args) { System.out.println(factorsOf(24)); } static List<Integer> factorsOf (int val) { List<Integer> factors = new ArrayList<Integer>(); for(int i=1; i <= val/2; i++) { if(val % i == 0) { factors.add(i); } } return factors; } } 
0
source
 public int[] primeFactors(int num) { ArrayList<Integer> factors = new ArrayList<Integer>(); factors.add(1); for (int a = 2; num>1; ) if (num%a==0) { factors.add(a); num/=a; } else a++; int[] out = new int[factors.size()]; for (int a = 0; a < out.length; a++) out[a] = factors.get(a); return out; } 
0
source

You are looking for a faster way:

 static int[] getFactors(int value) { int[] a = new int[31]; // 2^31 int i = 0, j; int num = value; while (num % 2 == 0) { a[i++] = 2; num /= 2; } j = 3; while (j <= Math.sqrt(num) + 1) { if (num % j == 0) { a[i++] = j; num /= j; } else { j += 2; } } if (num > 1) { a[i++] = num; } int[] b = Arrays.copyOf(a, i); return b; } 
0
source

You just skipped one step in if . The following code will be correct:

 System.out.println("\nThe factors of " + val + " are:"); 

You can take the square root of val for comparison and run the iterator by value 2

 if(val % i == 0) { numArray1 [index] = i; val=val/i; //add this index++; } 

but here you need to check if index 2 is equal, this is prime .

-2
source

All Articles