####################################### # M Matematica senza geometria. M.horner = function (v,alfa=2) {b=v[1]; m=length(v) if (m>1) for (i in 2:m) b=b*alfa+v[i]; b} # Numeri di Stirling di # seconda specie. M.stirling2 = function (n,k) {if (n==0) if (k==0) 1 else 0 else if (k==0) 0 else Recall(n-1,k-1)+k*Recall(n-1,k)} # Volume v_m della palla iscritta # al cubo unitario in R_m. # Statistica multivariata. M.volume = function (m) {if (m<=1) 1 else M.volume(m-2)*pi/(m+m)} ####################################### # MA Aritmetica. # Quoziente intero di 2 numeri reali. Ma.div = function (a,b) {q=floor(a/b); r=a-b*q if ((b<0)&&(r<0)) q=q+1; q} # Divisione e resto simultaneamente. Ma.diveresto = function (a,b) {q=floor(a/b); r=a-b*q; if ((b<0)&&(r<0)) {q=q+1; r=r-b} c(q,r)} # Primi <= n con Eratostene. Ma.eratostene = function (n) {v=2:n; u=c(); r=sqrt(n) repeat {p=v[1]; if(p>r) break; u=c(u,p) v=v[v%%p>0]} c(u,v)} # Calcola un numero naturale # dalla sua rappr. esad. r. Ma.esa = function (rapp) {rapp=tolower(rapp) u=strsplit(rapp,'',perl=T)[[1]] lettercifre=c(0:9, 'a','b','c','d','e','f') v=sapply(u,function (x) match(x,lettercifre)-1) v=as.numeric(v) M.horner(v,16)} # Rappresentazione binaria. Ma.rapp2 = function (n, cifre) {if (n<=1) v=n else if (n%%2==0) v=c(Recall(n/2),0) else v=c(Recall((n-1)/2),1) if (missing(cifre)) v else {n=length(v); if (n>=cifre) v else c(rep(0,cifre-n),v)}} # Resto nella divisione di # numeri reali. Ma.resto = function (a,b) {q=floor(a/b); r=a-b*q if ((b<0)&&(r<0)) r=r-b; r}