Como descobrir se um numero muito grande é primo com maior agilidade?
1 resposta
A
Alessandro09
Boa noite, fiz um programa para discobrir se um número é primo, porem quando informo um valor muito alto "prico", como ex: [telefone removido] ele demora muito para retornar a resposta, gostaria de saber se tem alguma forma de agilizar este processo.
O codigo que fiz é o seguinte:
publicclassExercicio1003{publicstaticvoidmain(String[]args){java.util.Scannerscan=newjava.util.Scanner(System.in);java.io.PrintStreamsaida=System.out;saida.print("Digite SAIR para sair do programa");while(true){longnum=0;try{saida.print("\n\nInforme um número Inteiro:");Stringst=scan.nextLine();if(st.equalsIgnoreCase("sair"))System.exit(0);num=Long.parseLong(st);if(num<=1)thrownewIllegalArgumentException("O número deve ser maior que 1!");}catch(NumberFormatExceptionnfe){saida.print("Erro: Dado Inválido");continue;}catch(IllegalArgumentExceptioniae){saida.print("Erro: "+iae.getMessage());continue;}Stringresp="";if(num%2==1){for(longi=2;i<num/2;i++){if(num%i==0){resp="NÂO é um número primo";break;}resp="É um número primo";}}elseresp="NÂO é um número primo";if(num==2)resp="É um número primo";saida.print(resp);}}}
packagecom.planetadventure.mashups;publicclassTestPrimeNumber{publicstaticlonginput,root;publicstaticbooleanisPrime;publicstaticvoidmain(String[]args){longstart=newjava.util.Date().getTime();try{input=Long.parseLong("[telefone removido]");}catch(NumberFormatExceptionnfx){System.out.println("NAN");System.exit(1);}if(input==((input>>1)<<1)){input+=1;}for(longi=input;;i+=2){root=(long)Math.sqrt(i);for(longj=3;j<=root;j++){if(i==(long)(i/j)*j){isPrime=false;break;}if(j==root){isPrime=true;}}if(isPrime==true){System.out.println(i+" is prime");break;}else{System.out.println(i+" is not prime");}}longend=newjava.util.Date().getTime();calculateTime((end-start)/1000);}publicstaticvoidcalculateTime(longtimeInSeconds){longhours,minutes,seconds;hours=timeInSeconds/3600;timeInSeconds=timeInSeconds-(hours*3600);minutes=timeInSeconds/60;timeInSeconds=timeInSeconds-(minutes*60);seconds=timeInSeconds;System.out.println(hours+" hour(s) "+minutes+" minute(s) "+seconds+" second(s)");}}