Я создал простую программу простой факторизации на java для удовольствия. Прямо сейчас я использую класс Random и метод nextLong(), чтобы присвоить «temp» случайное число в диапазоне квинтиллионов и удивительно быстро факторизовать его. Какой тип данных, алгоритм или метод следует использовать для получения значительно больших значений?
import java.util.Random;
import javax.swing.JOptionPane;
public class factor {
public static void main(String[] args) {
Random gen = new Random();
String factors = "";
long temp = 0;
String hello = JOptionPane.showInputDialog("Type a random number(Must be smaller than 4,611,686,018,427,387,904), or type 1 for a random large number.");
temp = Long.parseLong(hello);
if(temp < 2)
temp = Math.abs(gen.nextLong());
long temp2 = temp;
System.out.println(" The factors of \n\n " + temp2 + " are:");
System.out.println("");
while(temp != 1){
//System.out.print(temp);
for(long ii = 2; ii <= (Math.ceil(Math.sqrt(temp))); ii++){
// if(ii%12345 == 0)
// System.out.println(temp + " " + ii + " " + factors);
if(temp%ii == 0){
factors = factors + " " + ii;
// System.out.println(temp + " " + ii + " " + factors);
temp = temp/ii;
ii = temp + 1;
}else{
if(ii == Math.ceil(Math.sqrt(temp))){
factors = factors + " " + temp;
System.out.println(factors);
temp = 1;
ii = temp + 1;
}}
}
}}}
if(temp%ii == 0)
тогда...ii = temp +1
Почему? Какой результат вы получите, например, для числа 81? Вы получаете 3 3 3 3 ? - person peter.petrov   schedule 30.04.2014BigInteger
приходит на ум... - person takendarkk   schedule 30.04.2014temp = 4611686018427387903L;
Это не так быстро, как вы думаете. - person peter.petrov   schedule 30.04.2014temp = 924961025514621481L
. - person peter.petrov   schedule 30.04.20145075762304003453001
и4591670831448457501
. - person peter.petrov   schedule 30.04.2014