package algoritmos;

import java.util.Random;

import ialgoritmos.IFatoracao;

public class Pollardp implements IFatoracao {

	private long numero;
	
	public Pollardp(long numero){
		this.numero = numero;
	}
	public String fatora(){
		String retorno = "";
		retorno = retorno + "-----------POLLARD(P-1)------------"+"</br>";
		long semente = System.currentTimeMillis();
		Random random = new Random(semente);
		int k = 0;
		long fatorial = 0;
		long a = 0;
		long d = 0;
		while (true){
			k = random.nextInt(300);
			fatorial = Metodos.fatorial(k);
			int itera = 0;
			while(true){
				itera++;
			a = random.nextInt((int)numero);
			
			if (Metodos.mdc(a, numero)>1){
				
				retorno = retorno + Metodos.mdc(a, numero)+ " é um fator de "+ numero +" "+ itera  +" ITERAÇÕES!"+"</br>";
				
				break;
			}else{
				
				long aux = (long)Math.pow(a,fatorial)-1;
				d = Metodos.mdc(aux, numero);
			if(d>1&&d<numero){
				
				retorno = retorno + d + " é fator de "+ numero+" " +itera+" ITERAÇÕES!"+"</br>";
				break;
			}else if (d==numero){
				continue;
			}
			}
		}if (d == 1){
			continue;
		}else
			break;
		}
		retorno = retorno + "-----------------------------------</br>";
		return retorno;
	}
}
