Bonsoir tout le monde;
J'ai un code j'ava qui calcule ma formule sur les nombres premiers;
Je viendrais après pour publier la démonstration sur ce forum en d'une discussion serine
q=div1(2n+1) ; si q=1 ⇒b=q ; fin de calcul ; sinon q=div1(2n+q) ; b=q ; jusqu’à q=1 et b égale à l’avant dernière valeur de q ;
P(n)=2n+b;
ça existe sur d'autre plate-forme:
pour comprendre l'algo voici la trace:
n=16 ;q=div1(2x16+1) ; q= div1(33) ⇒q=3 !=1 b=3 ;q=div1(2x16+3)=div1(32+3)= div1(35)=5 !=1 ; b=5 ;
q=div1(32+5)= div1(37)=1 ; q=1 fin
P(n)=2n+b;
P(16)=2x16+5; ⇒P(16)=37 ;
Mais il y aussi des rangs n qui n'ont aucune correspondance qu'il faut sortir dans l'algo avec p=0 ; qui est normale
n=37 ; q=div1(2x37+1) ; q= div1(75) ⇒q=3 !=1 b=3 ;q=div1(2x37+3)=div1(74+3)= div1(77)=7 !=1 ; b=7 ; q= div1(74+7)= div1(81)=3 ; q !=1 fin
Donc ici on entre dans une boucle infinie
l’accès au élément du tableau k me fait tourner en rond mais sans faire des commentaires, voici le code :
voici le code d'erreur:Code:package Premier; import java.util.*; public class Premier { public static void main(String[] args) { Premier P1 = new Premier(); @SuppressWarnings("resource") Scanner keby = new Scanner(System.in); int s=0; System.out.println("Veuillez saisir un rang n :"); s=keby.nextInt(); System.out.printf("P : %d \n", +P1.Formule2(s)); } public int Div1 (int n) { int i =2; int d=n-1 ; int div=1; while ((i<d) && ((n) % (i) != 0)) { if ((n) % (i) ==0) { div = i ; } i =i+1 ; } if ((n) % (i) ==0) { div = i ; } return div; } public int Formule2 (int n){ int i=0; int r=0; int control = 2 * n + 1 ; int Q = Div1(2 * n + 1); int b = Q; int sortie = 0; ArrayList<Integer> K= new ArrayList<Integer> (); K.add(control); while ((Q!=1) && (sortie == 0)) { b = Q ; Q = Div1(2 * n + Q); control=2 * n + Q; r=K.size(); while ((i<r) && (control != K.get(i) )) { i=i+1; } /*System.out.printf("element : %d \n", + K.get(i));*/ if (control== K.get(i) ) { sortie = sortie + 1; } else{ K.add(2 * n + Q); } } if ((Q!=1) && (sortie == 1) ){ return 0; } else { return (2 * n + b); } }
Veuillez saisir un rang n :
16
Exception in thread "main" java.lang.IndexOutOfBoundsExce ption: Index: 1, Size: 1
at java.util.ArrayList.rangeCheck (Unknown Source)
at java.util.ArrayList.get(Unknow n Source)
at Premier.Premier.Formule2(Premi er.java:75)
at Premier.Premier.main(Premier.j ava:14)
il n’accède pas cette partie du code
if (control== K.get(i) ) {
Merci d'avance pour votre aide
-----