manish icon

mirc Useful Functions - $fact , $hcf , $lcm , $isprime

manish | PRO | 06/13/17 03:16:47 AM UTC | 0 ⭐ | 448 👁️ | Never ⏰ | []
mIRC |

2.43 KB

|

None

|

0 👍

/

0 👎

############################################################
##      mIRC functions for factorisation , lcm , hcf , isprime    ( $fact , $isprime , $hcf , $lcm)      ##
##       Version: 1.0              ##
##       By: manish              ##
##       irc.lunarirc.net   #LunarIRC #LunarGames   User - manish  
############################################################
alias fact { 
  if ($isprime($1)) || ($1 == 1) { return $1 $+ ¹ }
  elseif ( $1 == 0 ) { return - } 
  elseif ( $1 < 0 ) { return N/A }
  set %number $1
  unset %answer 
  while ( %number > 1 ) { 
    set %power 0
    set %no 2 
    set %max $calc( %number / 2)
    while ( %no <= %max ) { 
      if ( %no // %number ) { 
        set %number $calc( %number / %no )
        inc %power
      }
      else { 
        if ( %power == 0 ) { inc %no }
        else { 
          set %answer %answer * %no $+ ^ $+ %power
          inc %no
          set %power 0
        } 
} 
} 
}
  set %answer $right(%answer,-1)
  if ($isid) { return $replace(%answer,^0,⁰,^1,¹,^2,²,^3,³,^4,⁴,^5,⁵,^6,⁶,^7,⁷,^8,⁸,^9,⁹) } 
}
 
alias isprime {
 if ( $round($1,0) != $1 ) || ($1 < 2) return $null
  if ($1 < 4) return $true
  if ($1 > 3) {
   if ( 2 // $1 ) { return $false }
    var %x = 1
    var %y = $floor($sqrt($1))
    while (%x < %y) {
      inc %x 2
      if (%x // $1) return $false
    }
    return $true
  }
}
 
alias hcf { 
  set %numbers $sorttok($1-,32,n)
  set %numtok $numtok(%numbers,32)
  set %first $gettok(%numbers,1,32)
  if (%first < 0 ) { return N/A }
  elseif (%first == 0 ) { return 0 }
  set %x 1 
  while ( %x <= %first ) { 
    set %omg 1 
    set %y 0
    while ( %omg <= %numtok ) { 
      set %curtok $gettok(%numbers,%omg,32)
      if ( %x // %curtok ) { 
        inc %y 
        if ( %y == %numtok) { set %hcf %x }
      } 
      inc %omg
    }
    inc %x
  }
  if ($isid) { return %hcf }
}
 
alias lcm {
  set %lcm 1
  set %numbersare $sorttok($1-,32,n)
  set %first $gettok(%numbersare,1,32)
  if (%first < 0 ) { return N/A }
  elseif (%first == 0 ) { return 0 }
elseif ( $numtok(%numbersare,32) == 1 ) { return %numbersare }
 
  while ( $numtok(%numbersare,32) > 1 ) {
    set %a $gettok(%numbersare,1,32)
    set %b $gettok(%numbersare,2,32)
    set %c $hcf(%a %b)
    set %lcm $calc( %a * %b / %c )
    set %numbersare %lcm %numbersare
    set %numbersare $deltok(%numbersare,2-3,32)
  }
  return %lcm
}

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎