Program.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. // Traduction des OpCodes en version lisible
  2. /////////////////////////////////////////////////////////////////////////
  3. // #ip 3 | IP is reg 3
  4. // #0 addi 3 16 3 | IP + 16
  5. // #1 seti 1 0 4 | r4 = 1
  6. // #2 seti 1 7 2 | r2 = 1
  7. // #3 mulr 4 2 1 | r1 = r2 * r4
  8. // #4 eqrr 1 5 1 | r1 = r1 == r5
  9. // #5 addr 1 3 3 | IP + r1
  10. // #6 addi 3 1 3 | IP + 1
  11. // #7 addr 4 0 0 | r0 = r4 + r0
  12. // #8 addi 2 1 2 | r2 = r2 + 1
  13. // #9 gtrr 2 5 1 | r1 = r2 > r5
  14. // #10 addr 3 1 3 | IP + r1
  15. // #11 seti 2 6 3 | IP = 2
  16. // #12 addi 4 1 4 | r4 = r4 + 1
  17. // #13 gtrr 4 5 1 | r1 = r4 > r5
  18. // #14 addr 1 3 3 | IP + r1
  19. // #15 seti 1 3 3 | IP = 1
  20. // #16 mulr 3 3 3 | IP * IP -> 16 * 16 = 256 == OUT OF BOUNDS !
  21. // #17 addi 5 2 5 | r5 = r5 + 2
  22. // #18 mulr 5 5 5 | r5 = r5 * r5
  23. // #19 mulr 3 5 5 | r5 = IP * r5
  24. // #20 muli 5 11 5 | r5 = r5 * 11
  25. // #21 addi 1 6 1 | r1 = r1 + 6
  26. // #22 mulr 1 3 1 | r1 = r1 * IP
  27. // #23 addi 1 13 1 | r1 = r1 + 13 -> 145
  28. // #24 addr 5 1 5 | r5 = r5 + r1 -> 981
  29. // #25 addr 3 0 3 | IP + r0 -> r0 est 1 au 1er passage, 0 ensuite
  30. // #26 seti 0 6 3 | IP = 0
  31. // #27 setr 3 1 1 | r1 = 27
  32. // #28 mulr 1 3 1 | r1 = r1 * 28
  33. // #29 addr 3 1 1 | r1 = 29 + r1
  34. // #30 mulr 3 1 1 | r1 = 30 * r1
  35. // #31 muli 1 14 1 | r1 = r1 * 14
  36. // #32 mulr 1 3 1 | r1 = r1 * 32 -> 10550400
  37. // #33 addr 5 1 5 | r5 = r5 + r1 -> 10551381
  38. // #34 seti 0 0 0 | r0 = 0
  39. // #35 seti 0 3 3 | IP = 0
  40. // Traduction en caude haut-niveau
  41. /////////////////////////////////////////////////////////////////////////
  42. /*
  43. double r0 = 0;
  44. double r1 = 329700;
  45. double r2 = 0;
  46. //double r3 = IP;
  47. double r4 = 0;
  48. double r5 = 330681;
  49. r4 = 1;
  50. do
  51. {
  52. r2 = 1;
  53. do
  54. {
  55. if (r2 * r4 == r5)
  56. {
  57. r0 += r4;
  58. }
  59. r2++;
  60. } while (r2 <= r5);
  61. r4++;
  62. } while (r4 <= r5);
  63. return r0;
  64. */
  65. // Transformation du code pour la compréhension
  66. /////////////////////////////////////////////////////////////////////////
  67. /*
  68. double r0 = 0;
  69. double r5 = 10551381;
  70. for (var r4 = 1; r4 <= r5 ; r4++)
  71. {
  72. for (var r2 = 1 ; r2 <= r5 ; r2++)
  73. {
  74. if (r2 * r4 == r5) r0 += r4;
  75. }
  76. }
  77. return r0;
  78. */
  79. // CONCLUSION
  80. /////////////////////////////////////////////////////////////////////////
  81. // => C'est la somme de tous les facteurs de 10551381 !
  82. using System;
  83. namespace D19._2
  84. {
  85. class Program
  86. {
  87. static void Main(string[] args)
  88. {
  89. double r0 = 0;
  90. double r5 = 10551381;
  91. for (int r4 = 1; r4 <= r5 / 2; r4++)
  92. if (r5 % r4 == 0) r0 += r4;
  93. if (r5 > 1) r0 += r5;
  94. Console.WriteLine($"The answer is : {r0}");
  95. }
  96. }
  97. }