27 lines
842 B
Text
27 lines
842 B
Text
\\ Stern-Brocot sequence
|
|
\\ 5/27/16 aev
|
|
SternBrocot(n)={
|
|
my(L=List([1,1]),k=2); if(n<3,return(L));
|
|
for(i=2,n, listput(L,L[i]+L[i-1]); if(k++>=n, break); listput(L,L[i]);if(k++>=n, break));
|
|
return(Vec(L));
|
|
}
|
|
\\ Find the first item in any list starting with sind index (return 0 or index).
|
|
\\ 9/11/2015 aev
|
|
findinlist(list, item, sind=1)={
|
|
my(idx=0, ln=#list); if(ln==0 || sind<1 || sind>ln, return(0));
|
|
for(i=sind, ln, if(list[i]==item, idx=i; break;)); return(idx);
|
|
}
|
|
{
|
|
\\ Required tests:
|
|
my(v,j);
|
|
v=SternBrocot(15);
|
|
print1("The first 15: "); print(v);
|
|
v=SternBrocot(1200);
|
|
print1("The first i@n: "); \\print(v);
|
|
for(i=1,10, if(j=findinlist(v,i), print1(i,"@",j,", ")));
|
|
if(j=findinlist(v,100), print(100,"@",j));
|
|
v=SternBrocot(10000);
|
|
print1("All GCDs=1?: ");
|
|
j=1; for(i=2,10000, j*=gcd(v[i-1],v[i]));
|
|
if(j==1, print("Yes"), print("No"));
|
|
}
|