Je pense que quelque soit les bases, quelque soit le degré de l'élévation du nombre, on a toujours des nombres qui boucle.
Je te file le programme en JAVA si tu veux l'adapter (on teste que les 10000 premiers entiers, et on calcule maximum jusqu'au 5000ème éléments de la suite), par contre, il ne gère pas les différentes bases (ni le degré).
Code:import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.TreeMap; public class Main { public static void main(String[] args){ BigDecimal bg = null; BigDecimal bgFound = null; List<BigDecimal> numbers = null; Map<BigDecimal, Boolean> result = new TreeMap<BigDecimal, Boolean>(); for (int i = 2; i <= 10000; i++) { bg = new BigDecimal(i); numbers = new ArrayList<BigDecimal>(); boolean resultCase = false; numbers.add(bg); BigDecimal iteration = bg; for (int j = 0; j < 5000; j++) { iteration = iterate(iteration); if(numbers.contains(iteration)){ numbers.add(iteration); bgFound = bg; break; } else{ if(iteration == null){ resultCase = true; break; } else{ numbers.add(iteration); } } } result.put(bg, resultCase); if(bgFound != null){ break; } } if(bgFound != null){ System.out.println("Ca boucle pour le nombre : " + bgFound); System.out.println("Suite des " + numbers.size() + " premiers nombres de la suite commencant par " + bgFound + " :"); System.out.println("---------------------"); for (BigDecimal bigDecimal : numbers) { System.out.println(bigDecimal); } System.out.println("---------------------"); } else{ System.out.println("Suite qui a convergée ou non : "); int converge = 0; int total = 0; for (Map.Entry<BigDecimal, Boolean> bigDecimalEntry : result.entrySet()) { total++; if(bigDecimalEntry.getValue()){ converge++; System.out.println(bigDecimalEntry.getKey() + " converge"); for (BigDecimal bigDecimal : numbers) { System.out.println(bigDecimal); } } } System.out.println("Ratio de suites ayant convergées : " + converge/total); } } private static BigDecimal iterate(BigDecimal bg) { char[] chars = bg.toString().toCharArray(); StringBuilder sb = new StringBuilder(); for (int i = 0; i < chars.length; i++) { if(i != chars.length-1){ sb.append(chars[i]).append('|'); } else{ sb.append(chars[i]); } } String result = bg.pow(2).toString().replaceAll(sb.toString(), ""); if(result != null && result.length() != 0){ return new BigDecimal(result); } else{ return null; } } }
-----