(Haskell)
a001175 1 = 1
a001175 n = f 1 ps 0 where
f 0 (1 : xs) pi = pi
f _ (x : xs) pi = f x xs (pi + 1)
ps = 1 : 1 : zipWith (\u v -> (u + v) `mod` n) (tail ps) ps
(SageMath) def a(n): return BinaryRecurrenceSequence(1, 1).period(n) #
Ralf Stephan, Jan 23 2014
(PARI) minWSS=2^64; \\ PrimeGrid search
fibmod(n, m)=((Mod([1, 1; 1, 0], m))^n)[1, 2]
entryp(p)=my(k=p+[0, -1, 1, 1, -1][p%5+1], f=factor(k)); for(i=1, #f[, 1], for(j=1, f[i, 2], if((Mod([1, 1; 1, 0], p)^(k/f[i, 1]))[1, 2], break); k/=f[i, 1])); k
entry(n)=if(n==1, return(1)); my(f=factor(n), v); v=vector(#f~, i, if(f[i, 1]>=minWSS, entryp(f[i, 1]^f[i, 2]), entryp(f[i, 1])*f[i, 1]^(f[i, 2] - 1))); if(f[1, 1]==2&&f[1, 2]>1, v[1]=3<<max(f[1, 2]-2, 1)); lcm(v)
a(n)=if(n==1, return(1)); my(k=entry(n)); forstep(i=k, n^2, k, if(fibmod(i-1, n)==1, return(i))) \\
Charles R Greathouse IV, Feb 13 2014; updated Dec 14 2016; updated Aug 24 2021; updated Jul 08 2024
(Python)
from functools import reduce
from sympy import factorint, lcm
if n == 1:
return 1
f = factorint(n)
if len(f) > 1:
return reduce(lcm, (
A001175(a**f[a]) for a in f))
else:
k, x = 1, [1, 1]
while x != [0, 1]:
k += 1
x = [x[1], (x[0]+x[1]) % n]