Prim und Co.

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Unsere Datenschutzerklärung wurde aktualisiert. Mit der Nutzung unseres Forums akzeptierst Du unsere Datenschutzerklärung. Du bestätigst zudem, dass Du mindestens 16 Jahre alt bist.

    • Prim und Co.

      Da ich zu kgV nicht sehr viel im Internet fand, habe ich mir diese Berechnung mal zur Brust genommen.
      Das Ergebnis ist dieses kleine Programm (wieder mal in größter Version entworfen).

      kgV - kleinstes gemeinsames Vielfaches
      ggT - größter gemeinsamer Teiler
      Primfaktor - die Zerlegung wird bei kgV() intern etwas anders genutzt.


      Quellcode

      1. ' Prim und Co.
      2. ' Autor: Michael Wodrich
      3. Proc PrimFac
      4. REM Declare int PFactor[] : PFactor[] = PrimFac(123456)
      5. REM WhileLoop 0,SizeOf(PFactor[])-1 : If &loop > 0 : Print "·";PFactor[&loop]; : Else : Print PFactor[&loop]; : EndIf : EndWhile : Print ""
      6. Parameters int n
      7. Declare int PFac[], cnt, diff, t
      8. cnt = 0 : diff = 2 : t = 5
      9. While (n mod 2) = 0 : PFac[cnt] = 2 : inc cnt : n = n \ 2 : EndWhile
      10. While (n mod 3) = 0 : PFac[cnt] = 3 : inc cnt : n = n \ 3 : EndWhile
      11. While (t * t) <= n
      12. While (n mod t) = 0 : PFac[cnt] = t : inc cnt : n = n \ t : EndWhile
      13. t = t + diff : diff = 6 - diff
      14. EndWhile
      15. Case n > 1 : PFac[cnt] = n
      16. Return PFac[]
      17. EndProc
      18. Proc kgV
      19. REM print "kgV() = ";format$("%d",kgV(12,8))
      20. REM print "kgV() = ";format$("%d",kgV(62,36))
      21. Declare float erg, int cnt,x[],xc[]
      22. cnt = -1
      23. Proc findInX : Parameters int fac : Var int erg = -1 : Case SizeOf(x[]) < 1 : Return erg : WhileLoop 0,SizeOf(x[])-1 : If x[&loop] = fac : erg = &loop : Break : EndIf : EndWhile : Return erg : EndProc
      24. Proc addInX : Parameters int fac,fcnt : Declare int n : n = findInX(fac) : If n=-1 : Inc cnt : x[cnt] = fac : xc[cnt] = fcnt : Else : Case xc[n] < fcnt : xc[n] = fcnt : EndIf : EndProc
      25. Proc sum : var float erg = 0.0 : If SizeOf(x[]) > 0 : erg = x[0]^xc[0] : WhileLoop 1,SizeOf(x[])-1 : erg = erg * x[&loop]^xc[&loop] : EndWhile : EndIf : Return erg : EndProc
      26. Proc pfc
      27. Parameters int n
      28. Declare int fac, fcnt, diff, t
      29. diff = 2 : t = 5
      30. fac = 2 : fcnt = 0 : While (n mod 2) = 0 : inc fcnt : n = n \ 2 : EndWhile : Case fcnt > 0 : addInX(2,fcnt)
      31. fac = 3 : fcnt = 0 : While (n mod 3) = 0 : inc fcnt : n = n \ 3 : EndWhile : Case fcnt > 0 : addInX(3,fcnt)
      32. While (t * t) <= n
      33. fcnt = 0 : While (n mod t) = 0 : inc fcnt : n = n \ t : EndWhile : Case fcnt > 0 : addInX(t,fcnt)
      34. t = t + diff : diff = 6 - diff
      35. EndWhile
      36. Case n > 1 : addInX(n,1)
      37. EndProc
      38. Select %PCount
      39. CaseOf 9 : Parameters int a9,b9,c9,d9,e9,f9,g9,h9,i9 : pfc a9 : pfc b9 : pfc c9 : pfc d9 : pfc e9 : pfc f9 : pfc g9 : pfc h9 : pfc i9 : Return sum()
      40. CaseOf 8 : Parameters int a8,b8,c8,d8,e8,f8,g8,h8 : pfc a8 : pfc b8 : pfc c8 : pfc d8 : pfc e8 : pfc f8 : pfc g8 : pfc h8 : Return sum()
      41. CaseOf 7 : Parameters int a7,b7,c7,d7,e7,f7,g7 : pfc a7 : pfc b7 : pfc c7 : pfc d7 : pfc e7 : pfc f7 : pfc g7 : Return sum()
      42. CaseOf 6 : Parameters int a6,b6,c6,d6,e6,f6 : pfc a6 : pfc b6 : pfc c6 : pfc d6 : pfc e6 : pfc f6 : Return sum()
      43. CaseOf 5 : Parameters int a5,b5,c5,d5,e5 : pfc a5 : pfc b5 : pfc c5 : pfc d5 : pfc e5 : Return sum()
      44. CaseOf 4 : Parameters int a4,b4,c4,d4 : pfc a4 : pfc b4 : pfc c4 : pfc d4 : Return sum()
      45. CaseOf 3 : Parameters int a3,b3,c3 : pfc a3 : pfc b3 : pfc c3 : Return sum()
      46. CaseOf 2 : Parameters int a2,b2 : pfc a2 : pfc b2 : Return sum()
      47. EndSelect
      48. Return 0.0
      49. EndProc
      50. Proc ggT2 : Parameters quad a,b : Declare quad t : if b>a:t=a:a=b:b=t:endif : Case b=0:Return a : Return ggT2(b,a mod b) : EndProc
      51. Proc ggT
      52. REM print "ggT() = ",ggT(1023,99,1071,1029)
      53. REM print "ggT() = ",ggT(15400,7875,3850)
      54. REM print "ggT() = ",ggT(62,36)
      55. Select %PCount
      56. CaseOf 9 : Parameters quad a9,b9,c9,d9,e9,f9,g9,h9,i9 : Return ggT2(ggT2(ggT2(ggT2(ggT2(ggT2(ggT2(ggT2(a9,b9),c9),d9),e9),f9),g9),h9),i9)
      57. CaseOf 8 : Parameters quad a8,b8,c8,d8,e8,f8,g8,h8 : Return ggT2(ggT2(ggT2(ggT2(ggT2(ggT2(ggT2(a8,b8),c8),d8),e8),f8),g8),h8)
      58. CaseOf 7 : Parameters quad a7,b7,c7,d7,e7,f7,g7 : Return ggT2(ggT2(ggT2(ggT2(ggT2(ggT2(a7,b7),c7),d7),e7),f7),g7)
      59. CaseOf 6 : Parameters quad a6,b6,c6,d6,e6,f6 : Return ggT2(ggT2(ggT2(ggT2(ggT2(a6,b6),c6),d6),e6),f6)
      60. CaseOf 5 : Parameters quad a5,b5,c5,d5,e5 : Return ggT2(ggT2(ggT2(ggT2(a5,b5),c5),d5),e5)
      61. CaseOf 4 : Parameters quad a4,b4,c4,d4 : Return ggT2(ggT2(ggT2(a4,b4),c4),d4)
      62. CaseOf 3 : Parameters quad a3,b3,c3 : Return ggT2(ggT2(a3,b3),c3)
      63. CaseOf 2 : Parameters quad a2,b2 : Return ggT2(a2,b2)
      64. CaseOf 1 : Parameters quad a1 : Return a1
      65. EndSelect
      66. Return 0
      67. EndProc
      68. Proc kgV_aus_ggT
      69. REM print "kgV_aus_ggT() = ";format$("%d",kgV_aus_ggT(53667,459486))
      70. REM print "kgV_aus_ggT() = ";format$("%d",kgV_aus_ggT(62,36))
      71. var float erg = 0.0
      72. Select %PCount
      73. CaseOf 9 : Parameters int a9,b9,c9,d9,e9,f9,g9,h9,i9 : erg = a9*b9*c9*d9*e9*f9*g9*h9*i9 / ggT(a9,b9,c9,d9,e9,f9,g9,h9,i9)
      74. CaseOf 8 : Parameters int a8,b8,c8,d8,e8,f8,g8,h8 : erg = a8*b8*c8*d8*e8*f8*g8*h8 / ggT(a8,b8,c8,d8,e8,f8,g8,h8)
      75. CaseOf 7 : Parameters int a7,b7,c7,d7,e7,f7,g7 : erg = a7*b7*c7*d7*e7*f7*g7 / ggT(a7,b7,c7,d7,e7,f7,g7)
      76. CaseOf 6 : Parameters int a6,b6,c6,d6,e6,f6 : erg = a6*b6*c6*d6*e6*f6 / ggT(a6,b6,c6,d6,e6,f6)
      77. CaseOf 5 : Parameters int a5,b5,c5,d5,e5 : erg = a5*b5*c5*d5*e5 / ggT(a5,b5,c5,d5,e5)
      78. CaseOf 4 : Parameters int a4,b4,c4,d4 : erg = a4*b4*c4*d4 / ggT(a4,b4,c4,d4)
      79. CaseOf 3 : Parameters int a3,b3,c3 : erg = a3*b3*c3 / ggT(a3,b3,c3)
      80. CaseOf 2 : Parameters int a2,b2 : erg = a2*b2 / ggT(a2,b2)
      81. CaseOf 1 : Parameters int a1 : erg = a1
      82. EndSelect
      83. Return erg
      84. EndProc
      85. declare long x,y, i
      86. declare int PFactor[]
      87. cls
      88. print "kgV() = ";format$("%d",kgV(53667,459486))
      89. print "kgV_X() = ";format$("%d",kgV_aus_ggT(53667,459486))
      90. waitinput
      91. x = 62 : y = 36
      92. print "ggT(";x;",";y;") = ",ggT(x,y)
      93. x = 1023 : y = 99
      94. print "ggT(";x;",";y;") = ",ggT(x,y)
      95. x = 1071 : y = 1029
      96. print "ggT(";x;",";y;") = ",ggT(x,y)
      97. print "-"
      98. print "ggT() = ",ggT(1023,99,1071,1029)
      99. print "ggT() = ",ggT(15400,7875,3850)
      100. whileloop 2,1000
      101. print "\nFaktor (";&loop;"): ";
      102. PFactor[] = PrimFac(&loop)
      103. for i,0,sizeof(PFactor[])-1
      104. if i>0 : print "·";PFactor[i]; : else : print PFactor[i]; : endif
      105. endfor
      106. Clear PFactor[]
      107. endwhile
      108. waitinput
      109. end
      Alles anzeigen
      Darf natürlich frei verwurstet werden...

      Gruß
      Michael Wodrich
      Programmieren, das spannendste Detektivspiel der Welt.
    • Sowas ähnliches hab ich mal für Parcival geschrieben, aber ich würde spontan behaupten, dass meins irgendwie einfacher war. Bei Gelegenheit suche ich das mal raus.
      XProfan-Semiprofi (XProfan X4a+XPIA+LemonEd)
      Ryzen 1700X/MSI B350 PC MATE/16GB RAM@2933MHz/Radeon HD7770 OC/Creative X-Fi XTreme Music/65TB HDD+256GB Samsung 960 EVO/28" Samsung 4k
      XBox Classic/360S/One S/One X Scorpio Edition/PS3 Super Slim 500GB/PS4 Pro (XBL-ID: jacdelad, PSN: jacdelad84) auf 60" 4k/3D LG
      OnePlus 7 8GB/256GB
      jacdelad.bplaced.net