用于素数和分解的Java API

时间:2013-07-21 10:35:26

标签: java api primes factorization

我正在寻找用于快速素性测试和大数字因子分解的Java API。任何指针都对我很有帮助。

更新

我找到的资源是:

我期待使用Elliptic Curve FactorizationQuadratic Sieve

的API

另一种资源:Factorization using the Elliptic Curve Method

限制:10000位数字。

2 个答案:

答案 0 :(得分:0)

我建议Commons Math。您可以找到lib here API here。对你而言有趣的课程是Primes

答案 1 :(得分:0)

我使用了在Java中实现的Eratosthenes算法的筛子



public static ArrayList<Integer> primeNumbers(int end) {
		// generate array of number from 2 to end
		// generate flag array of same size
		// this numbers are inclusive
		int eff = 0;
		ArrayList<Integer> factors = new ArrayList<Integer>();
		if (end < 2) {
			return factors;
		}
		if (end == 2) {
			factors.add(2);
			return factors;
		}
		int numbers[] = new int[end - 1];
		boolean flags[] = new boolean[end - 1];
		int count = 2;
		// lets reset all numbers
		for (int i = 0; i < end - 1; i++) {
			numbers[i] = count;
			flags[i] = true;
			count++;
		}
		for (int i = 0; i < end - 1; i++) {
			if (flags[i]) {
				factors.add(numbers[i]);
				int loop = 2;
				for (long j = numbers[i] * loop; j <= end; j = numbers[i]
						* loop, loop++) {
					flags[(int) (j - 2)] = false;
					eff++;
				}
			}
		}
		// System.out.println(eff);
		return factors;
	}
&#13;
&#13;
&#13;

这将为您提供低于给定数量的所有素数,即 listOfPrime {2,3,5,7} = primeNumbers(10); 我们可以使用相同的数组来检查可分性

&#13;
&#13;
public static ArrayList < Integer > getPrimeFactors(int n) {
  ArrayList < Integer > primeNumbers = primeNumbers((n / 2) + 1);
  ArrayList < Integer > removal = new ArrayList < Integer > ();
  for (int i = 0; i < primeNumbers.size(); i++) {
    if (n % primeNumbers.get(i) != 0) {
      removal.add(primeNumbers.get(i));
    }
  }
  primeNumbers.removeAll(removal);
  return primeNumbers;
}
&#13;
&#13;
&#13;