Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
25
Task/Pisano-period/Sidef/pisano-period-1.sidef
Normal file
25
Task/Pisano-period/Sidef/pisano-period-1.sidef
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
func pisano_period_pp(p,k) is cached {
|
||||
|
||||
assert(k.is_pos, "k = #{k} must be positive")
|
||||
assert(p.is_prime, "p = #{p} must be prime")
|
||||
|
||||
var (a, b, n) = (0, 1, p**k)
|
||||
|
||||
1..Inf -> first_by {
|
||||
(a, b) = (b, (a+b) % n)
|
||||
(a == 0) && (b == 1)
|
||||
}
|
||||
}
|
||||
|
||||
func pisano_period(n) {
|
||||
n.factor_map {|p,k| pisano_period_pp(p, k) }.lcm
|
||||
}
|
||||
|
||||
say "Pisano periods for squares of primes p <= 15:"
|
||||
say 15.primes.map {|p| pisano_period_pp(p, 2) }
|
||||
|
||||
say "\nPisano periods for primes p <= 180:"
|
||||
say 180.primes.map {|p| pisano_period_pp(p, 1) }
|
||||
|
||||
say "\nPisano periods for integers n from 1 to 180:"
|
||||
say pisano_period.map(1..180)
|
||||
22
Task/Pisano-period/Sidef/pisano-period-2.sidef
Normal file
22
Task/Pisano-period/Sidef/pisano-period-2.sidef
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
func pisano_period_pp(p, k=1) {
|
||||
(p - kronecker(5, p)).divisors.first_by {|d| fibmod(d, p) == 0 } * p**(k-1)
|
||||
}
|
||||
|
||||
func pisano_period(n) {
|
||||
|
||||
return 0 if (n <= 0)
|
||||
return 1 if (n == 1)
|
||||
|
||||
var d = n.factor_map {|p,k| pisano_period_pp(p, k) }.lcm
|
||||
|
||||
3.times {|k|
|
||||
var t = d<<k
|
||||
if ((fibmod(t, n) == 0) && (fibmod(t+1, n) == 1)) {
|
||||
return t
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for k in (1..8) {
|
||||
say ("Pisano(F_#{k}) = ", pisano_period(2**(2**k) + 1))
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue