packages feed

cash-0.1.0.0: misc/sumEuler.g

# Time-stamp: <Wed Jun 23 2010 21:32:17 Stardate: Stardate: [-28]3269.27 hwloidl>
#
# This version is used in SymGrid-Par v0.3 to run some simple tests
# -----------------------------------------------------------------------------

hcf_recursive:=function(x,y)
local m;
if y = 0 then 
  return x;
else
  m := x mod y;
  return hcf_recursive(y,m);  
fi;
end;  

hcf_nonrecursive:=function(x,y)
local m;
m := x mod y;
while m <> 0 do
  x:=y;
  y:=m;
  m := x mod y;
od;
return y;
end;  

#############################################################################

relprime_recursive := function(x,y)
local m;
m:=hcf_recursive(x,y);
return m=1;
end;

relprime_nonrecursive := function(x,y)
local m;
m:=hcf_nonrecursive(x,y);
return m=1;
end;

relprime_classic := function(x,y)
local m;
m:=GcdInt(x,y);
return m=1;
end;

#############################################################################

euler_recursive := function(n)
local x;
x := Number(Filtered( [ 1..n ], x -> relprime_recursive(x,n) ) );
return x;
end;

euler_nonrecursive := function(n)
local x;
x := Number(Filtered( [ 1..n ], x -> relprime_nonrecursive(x,n) ) );
return x;
end;

euler_classic := function(n)
local x;
x := Number(Filtered( [ 1..n ], x -> relprime_classic(x,n) ) );
return x;
end;

#############################################################################

sumEuler_recursive:=function(n,m)
local result, x;
result:=Sum( [ n..m ], x -> euler_recursive(x) ); 
return result;
end;

sumEuler_nonrecursive:=function(n,m)
local result, x;
result:=Sum( [ n..m ], x -> euler_nonrecursive(x) ); 
return result;
end;

sumEuler_classic:=function(n,m)
local result, x;
result:=Sum( [ n..m ], x -> euler_classic(x) ); 
return result;
end;

SumEulerRange:=function(n,m)
local result, x;
result:=Sum( [ n..m ], x -> euler_classic(x) ); 
return result;
end;