Add tasks for all the new languages
This commit is contained in:
parent
9dc3c2bb62
commit
bba7bfd280
13208 changed files with 134745 additions and 0 deletions
|
|
@ -0,0 +1,22 @@
|
|||
(lib 'bigint)
|
||||
|
||||
(define a 2988348162058574136915891421498819466320163312926952423791023078876139)
|
||||
(define b 2351399303373464486466122544523690094744975233415544072992656881240319)
|
||||
(define m 1e40)
|
||||
|
||||
(powmod a b m)
|
||||
→ 1527229998585248450016808958343740453059
|
||||
|
||||
;; powmod is a native function
|
||||
;; it could be defined as follows :
|
||||
|
||||
(define (xpowmod base exp mod)
|
||||
(define result 1)
|
||||
(while ( !zero? exp)
|
||||
(when (odd? exp) (set! result (% (* result base) mod)))
|
||||
(/= exp 2)
|
||||
(set! base (% (* base base) mod)))
|
||||
result)
|
||||
|
||||
(xpowmod a b m)
|
||||
→ 1527229998585248450016808958343740453059
|
||||
18
Task/Modular-exponentiation/Nim/modular-exponentiation.nim
Normal file
18
Task/Modular-exponentiation/Nim/modular-exponentiation.nim
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
import bigints
|
||||
|
||||
proc powmod(b, e, m: BigInt): BigInt =
|
||||
assert e >= 0
|
||||
var e = e
|
||||
var b = b
|
||||
result = initBigInt(1)
|
||||
while e > 0:
|
||||
if e mod 2 == 1:
|
||||
result = (result * b) mod m
|
||||
e = e div 2
|
||||
b = (b.pow 2) mod m
|
||||
|
||||
var
|
||||
a = initBigInt("2988348162058574136915891421498819466320163312926952423791023078876139")
|
||||
b = initBigInt("2351399303373464486466122544523690094744975233415544072992656881240319")
|
||||
|
||||
echo powmod(a, b, 10.pow 40)
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
: powmod(base, exponent, modulus)
|
||||
1 exponent dup ifZero: [ return ]
|
||||
while ( dup 0 > ) [
|
||||
dup isEven ifFalse: [ swap base * modulus mod swap ]
|
||||
2 / base sq modulus mod ->base
|
||||
] drop ;
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
say expmod(
|
||||
2988348162058574136915891421498819466320163312926952423791023078876139,
|
||||
2351399303373464486466122544523690094744975233415544072992656881240319,
|
||||
10**40)
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
func expmod(a, b, n) {
|
||||
var c = 1
|
||||
do {
|
||||
(c *= a) %= n if b.is_odd
|
||||
(a *= a) %= n
|
||||
} while (b //= 2)
|
||||
c
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue