我正在寻找用于快速素性测试和大数字因子分解的Java API。任何指针都对我很有帮助。
我找到的资源是:
我期待使用Elliptic Curve Factorization或Quadratic Sieve。
的API另一种资源:Factorization using the Elliptic Curve Method。
限制:10000位数字。
答案 0 :(得分:0)
答案 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;
这将为您提供低于给定数量的所有素数,即 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;
}
&#13;