Pisano period: Difference between revisions
Content added Content deleted
(added RPL) |
(Added Easylang) |
||
Line 379: | Line 379: | ||
50 36 72 240 60 168 316 78 216 240 48 216 328 120 40 |
50 36 72 240 60 168 316 78 216 240 48 216 328 120 40 |
||
168 336 48 364 180 72 264 348 168 400 120 232 132 178 120</pre> |
168 336 48 364 180 72 264 348 168 400 120 232 132 178 120</pre> |
||
=={{header|EasyLang}}== |
|||
{{trans|Go}} |
|||
<syntaxhighlight> |
|||
fastfunc isprim num . |
|||
if num mod 2 = 0 |
|||
if num = 2 |
|||
return 1 |
|||
. |
|||
return 0 |
|||
. |
|||
if num mod 3 = 0 |
|||
if num = 3 |
|||
return 1 |
|||
. |
|||
return 0 |
|||
. |
|||
i = 5 |
|||
while i <= sqrt num |
|||
if num mod i = 0 |
|||
return 0 |
|||
. |
|||
i += 2 |
|||
if num mod i = 0 |
|||
return 0 |
|||
. |
|||
i += 4 |
|||
. |
|||
return 1 |
|||
. |
|||
func gcd a b . |
|||
if b = 0 |
|||
return a |
|||
. |
|||
return gcd b (a mod b) |
|||
. |
|||
func lcm a b . |
|||
return a / gcd a b * b |
|||
. |
|||
func ipow x p . |
|||
prod = 1 |
|||
while p > 0 |
|||
if p mod 2 = 1 |
|||
prod *= x |
|||
. |
|||
p = p div 2 |
|||
x *= x |
|||
. |
|||
return prod |
|||
. |
|||
proc getprims n . prims[] . |
|||
prims[] = [ ] |
|||
for i = 2 to n |
|||
d = n / i |
|||
m = n mod i |
|||
if m = 0 |
|||
prims[] &= i |
|||
prims[] &= 0 |
|||
while m = 0 |
|||
prims[-1] += 1 |
|||
n = d |
|||
d = n div i |
|||
m = n mod i |
|||
. |
|||
. |
|||
. |
|||
. |
|||
func pisanoPeriod m . |
|||
c = 1 |
|||
for i = 1 to m * m |
|||
swap p c |
|||
c = (p + c) mod m |
|||
if p = 0 and c = 1 |
|||
return i |
|||
. |
|||
. |
|||
return 1 |
|||
. |
|||
func pisanoPrime p k . |
|||
if isprim p = 0 or k = 0 |
|||
return 0 |
|||
. |
|||
return ipow p (k - 1) * pisanoPeriod p |
|||
. |
|||
func pisano m . |
|||
getprims m p[] |
|||
for i = 1 step 2 to len p[] - 1 |
|||
pps[] &= pisanoPrime p[i] p[i + 1] |
|||
. |
|||
if len pps[] = 0 |
|||
return 1 |
|||
. |
|||
if len pps[] = 1 |
|||
return pps[1] |
|||
. |
|||
f = pps[1] |
|||
for i = 2 to len pps[] |
|||
f = lcm f pps[i] |
|||
. |
|||
return f |
|||
. |
|||
proc main . . |
|||
for p = 2 to 14 |
|||
pp = pisanoPrime p 2 |
|||
if pp > 0 |
|||
print "pisanoPrime(" & p & ": 2) = " & pp |
|||
. |
|||
. |
|||
print "" |
|||
for p = 2 to 179 |
|||
pp = pisanoPrime p 1 |
|||
if pp > 0 |
|||
print "pisanoPrime(" & p & ": 1) = " & pp |
|||
. |
|||
. |
|||
print "" |
|||
numfmt 0 3 |
|||
print "pisano(n) for integers 'n' from 1 to 180 are:" |
|||
for n = 1 to 180 |
|||
write pisano (n) & " " |
|||
if n mod 15 = 0 |
|||
print "" |
|||
. |
|||
. |
|||
. |
|||
main |
|||
</syntaxhighlight> |
|||
=={{header|Factor}}== |
=={{header|Factor}}== |
||
{{works with|Factor|0.99 2020-01-23}} |
{{works with|Factor|0.99 2020-01-23}} |