// Traduction des OpCodes en version lisible ///////////////////////////////////////////////////////////////////////// // #ip 3 | IP is reg 3 // #0 addi 3 16 3 | IP + 16 // #1 seti 1 0 4 | r4 = 1 // #2 seti 1 7 2 | r2 = 1 // #3 mulr 4 2 1 | r1 = r2 * r4 // #4 eqrr 1 5 1 | r1 = r1 == r5 // #5 addr 1 3 3 | IP + r1 // #6 addi 3 1 3 | IP + 1 // #7 addr 4 0 0 | r0 = r4 + r0 // #8 addi 2 1 2 | r2 = r2 + 1 // #9 gtrr 2 5 1 | r1 = r2 > r5 // #10 addr 3 1 3 | IP + r1 // #11 seti 2 6 3 | IP = 2 // #12 addi 4 1 4 | r4 = r4 + 1 // #13 gtrr 4 5 1 | r1 = r4 > r5 // #14 addr 1 3 3 | IP + r1 // #15 seti 1 3 3 | IP = 1 // #16 mulr 3 3 3 | IP * IP -> 16 * 16 = 256 == OUT OF BOUNDS ! // #17 addi 5 2 5 | r5 = r5 + 2 // #18 mulr 5 5 5 | r5 = r5 * r5 // #19 mulr 3 5 5 | r5 = IP * r5 // #20 muli 5 11 5 | r5 = r5 * 11 // #21 addi 1 6 1 | r1 = r1 + 6 // #22 mulr 1 3 1 | r1 = r1 * IP // #23 addi 1 13 1 | r1 = r1 + 13 -> 145 // #24 addr 5 1 5 | r5 = r5 + r1 -> 981 // #25 addr 3 0 3 | IP + r0 -> r0 est 1 au 1er passage, 0 ensuite // #26 seti 0 6 3 | IP = 0 // #27 setr 3 1 1 | r1 = 27 // #28 mulr 1 3 1 | r1 = r1 * 28 // #29 addr 3 1 1 | r1 = 29 + r1 // #30 mulr 3 1 1 | r1 = 30 * r1 // #31 muli 1 14 1 | r1 = r1 * 14 // #32 mulr 1 3 1 | r1 = r1 * 32 -> 10550400 // #33 addr 5 1 5 | r5 = r5 + r1 -> 10551381 // #34 seti 0 0 0 | r0 = 0 // #35 seti 0 3 3 | IP = 0 // Traduction en caude haut-niveau ///////////////////////////////////////////////////////////////////////// /* double r0 = 0; double r1 = 329700; double r2 = 0; //double r3 = IP; double r4 = 0; double r5 = 330681; r4 = 1; do { r2 = 1; do { if (r2 * r4 == r5) { r0 += r4; } r2++; } while (r2 <= r5); r4++; } while (r4 <= r5); return r0; */ // Transformation du code pour la compréhension ///////////////////////////////////////////////////////////////////////// /* double r0 = 0; double r5 = 10551381; for (var r4 = 1; r4 <= r5 ; r4++) { for (var r2 = 1 ; r2 <= r5 ; r2++) { if (r2 * r4 == r5) r0 += r4; } } return r0; */ // CONCLUSION ///////////////////////////////////////////////////////////////////////// // => C'est la somme de tous les facteurs de 10551381 ! using System; namespace D19._2 { class Program { static void Main(string[] args) { double r0 = 0; double r5 = 10551381; for (int r4 = 1; r4 <= r5 / 2; r4++) if (r5 % r4 == 0) r0 += r4; if (r5 > 1) r0 += r5; Console.WriteLine($"The answer is : {r0}"); } } }