Problème intéressant.
L'astuce est de partir de la racine carré de j
Voila ma solution en java :
Code :
- public class TestCarre {
- public static void main(String[] args) {
-
- for (int J = 0; J <= 100; J++) {
- // on initialise ip avec la racine carre de J
- double ip = Math.sqrt(J);
- double jp;
- // on teste si ip est une valeur entière
- if (Math.rint(ip) == ip) {
- // cas simple où J est un carré => solution trouvée
- jp = ip;
- } else {
- ip = Math.floor(ip); // on initialise ip à sa valeur entière inférieure
- jp = J / ip;
- }
-
- // Ici on est sur que ip est un entier
- // Le but est de trouver la plus grande valeur de ip pour que jp = J / ip soit aussi entier
- while ((ip > jp / 2) && (Math.rint(jp) != jp)) {
- ip--;
- jp = J / ip;
- }
-
- // affichage si succès
- if (Math.rint(jp) == jp && (ip > jp / 2)) {
- System.out.println("J="+ J + " : Succes : ip="+(int)ip + ", jp=" + (int)jp);
- }
- }
- }
- }
|
Et le résultat :
J=1 : Succes : ip=1, jp=1
J=4 : Succes : ip=2, jp=2
J=6 : Succes : ip=2, jp=3
J=9 : Succes : ip=3, jp=3
J=12 : Succes : ip=3, jp=4
J=15 : Succes : ip=3, jp=5
J=16 : Succes : ip=4, jp=4
J=20 : Succes : ip=4, jp=5
J=24 : Succes : ip=4, jp=6
J=25 : Succes : ip=5, jp=5
J=28 : Succes : ip=4, jp=7
J=30 : Succes : ip=5, jp=6
J=35 : Succes : ip=5, jp=7
J=36 : Succes : ip=6, jp=6
J=40 : Succes : ip=5, jp=8
J=42 : Succes : ip=6, jp=7
J=45 : Succes : ip=5, jp=9
J=48 : Succes : ip=6, jp=8
J=49 : Succes : ip=7, jp=7
J=54 : Succes : ip=6, jp=9
J=56 : Succes : ip=7, jp=8
J=60 : Succes : ip=6, jp=10
J=63 : Succes : ip=7, jp=9
J=64 : Succes : ip=8, jp=8
J=66 : Succes : ip=6, jp=11
J=70 : Succes : ip=7, jp=10
J=72 : Succes : ip=8, jp=9
J=77 : Succes : ip=7, jp=11
J=80 : Succes : ip=8, jp=10
J=81 : Succes : ip=9, jp=9
J=84 : Succes : ip=7, jp=12
J=88 : Succes : ip=8, jp=11
J=90 : Succes : ip=9, jp=10
J=91 : Succes : ip=7, jp=13
J=96 : Succes : ip=8, jp=12
J=99 : Succes : ip=9, jp=11
J=100 : Succes : ip=10, jp=10
Message édité par Bidem le 18-11-2016 à 17:14:33