如何计算一个数字java

我需要将一个数字分解为24到1,2,2,2,3。 我的方法是:

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; } 

但它没有用。 任何人都可以帮助我吗?

你有一些错误,你不能创建没有大小的int数组。 我用的是数组列表。

 static Integer[] factorsOf(int val) { List numArray = new ArrayList(); 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()]); } 

根据您的请求使用int []的完整程序。

 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; } } 
 public int[] primeFactors(int num) { ArrayList factors = new ArrayList(); 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; } 

一个工作的例子

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

你看起来更快吗?:

 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; } 

你错过了一步, if 。 以下代码是正确的:

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

您可以使用val的平方根进行比较,并按值2启动迭代器

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

但在这里你需要检查索引是否为2,它是prime