【问题标题】:Java API for Prime Number and Factorization [closed]用于素数和因式分解的 Java API [关闭]
【发布时间】:2013-07-20 05:36:54
【问题描述】:

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

更新

我找到的资源是:

我期待使用Elliptic Curve FactorizationQuadratic Sieve 的API。

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

限制:10000位数字。

【问题讨论】:

  • 因式分解两个大素数的乘积非常困难,因式有多大?
  • @flup 数字最多 10000 位。另请参阅我的更新。
  • 您要链接的第二个资源有一个带有 java 源的 zip。
  • Ummm.... 你知道分解一个 10000 位的数字,除非它只包含非常小的因子,否则远远超出了可能性的范围,不是吗?迄今为止最大的半素数只有几百位数。
  • @TapasBose:您可以使用 Miller-Rabin 或 Baillie-Wagstaff 测试素性。请参阅我的 essay 获取 Miller-Rabin 或我的 blog 获取 Baillie-Wagstaff。我的博客上也有椭圆曲线和二次筛的实现。

标签: java api primes factorization


【解决方案1】:

我建议 Commons Math。你可以找到 lib here API here。你感兴趣的课程是Primes

【讨论】:

【解决方案2】:

我使用了用 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;
	}

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    • 2011-02-08
    • 2011-07-01
    相关资源
    最近更新 更多