1

Usted tiene un algoritmo que estima, dado un instante de tiempo \(\Delta t_1\), la variación de precio que tendrá una acción en la bolsa en los instantes \(\Delta t\) siguientes. Una vez que corre el algoritmo recibe una sucesión de variaciones de precio. Un valor de +3 significa que el precio tendrá un incremento de 3 unidades monetarias, un valor de -5 significa que el precio decrece en 5 unidades monetarias. Empezando con un precio de $0, ¿cuál será el precio resultante de la acción después de que ocurran todas las variaciones?

Para este ejercicio primero hay que importar los datos de las variaciones del .txt a un vector que se le dio el nombre de variaciones y después solo hay que aplicar la función sum() y aplicarla a dicho vector

variaciones=scan("C:\\Users\\hp\\Documents\\input.txt")
sum(variaciones)
## [1] 439

2

Usted recuerda que un supuesto fuerte del análisis técnico de acciones es, palabras más palabras menos, que la historia siempre se repite. Por lo cual como parte de su estrategia, y esperando tener cierta ventaja sobre el resto del mercado, se ve interesado en encontrar el primer precio que ocurre dos veces si las variaciones que obtuvo se repiten todo el tiempo.

Para este ejercicio, primero hacemos un vector que guardeen cada una de sus entradas a la suma de la primer variacion hasta la k-ésima variacion en cada caso, hasta el 989 que es el numero de variaciones. Este vector lo utilizamos para hacer una función que para a cada n nos devuelva la suma de las variaciones del 1 hasta n. En este caso el rpograma lo puse comentado porque se tardaba mucho en correr, en 20 minutos llego solo a 25000 iteraciones y parece ser que habias dicho que se necesitaban 1000000 o algo asi, entonces espero que lo puedas revisar a ver si esta bien redactado y todo eso.

#sumasv<-c()
#sumasv[1]=variaciones[1]
#for(i in 2:989){
# sumasv[i]=sumasv[i-1]+variaciones[i]  
#}

#sumtn <- function(n){
#b=floor(n/989)
#c=n%%989
#if(c==0){
# sn=439*b
#}else {
# sn= b*439 + sumasv[c]
#}
#return(sn) 
#}
#ABC=FALSE
#i=2
#sumtng<-c()
#sumtng[1]=sumtn(1)
#while(ABC==FALSE){
#sumtng[i]=sumtn(i) 
#for(j in 1:(i-1)){
# if(sumtng[j]==sumtn(i)){
#  ABC=TRUE
#print(j)
#print(i)
#print(sumtn(i))
# }} 
#i=i+1}

3

Si hacemos una lista de los números naturales menores a 10 que son multiplos de 3 o 5 obtendremos c(3, 5, 6, 9), la suma de esos multiplos es 23. Encuentre la suma de todos los multiplos de 3 o 5 menores a 1000.

Para saber cuantos multiplos de 3 en 3 hay del 1 al 1000, basta dividir este numero entre 3 o 5, una vez que obtenemos la cantidad de estos multiplos la suma de los multiplos sera la suma de esos primeros numeros narurales por el numero en cuestion.Para hacer la suma total que se pide en el ejercicio necesitamos restarle los multiplos del 3 y 5, es decir los del 15, bajo el mismo procedimiento.Primero sacamos los multiplos de 3 del uno al mil a los sumamos para el tres si dividimos 1000 entre 3 el numero entero sera 333 y asi vamos haciendo el procedimiento

sum3=((333*334)/2)*3 #suma de los primeros 333 numeros naturales multiplicados por ese 3 en cuestion
sum5=((200*201)/2)*5 #suma de los primeros 200 numeros naturales multiplicados por ese 5 en cuestion
sum15=((66*67)/2)*15 #suma de los primeros 66 numeros naturales multiplicados por ese 15 en cuestion

total = sum3 + sum5 - sum15 #sumamos los de 3, los de 5 y restamos los de 15(la interseccion)
total
## [1] 234168

4

Como bien sabe, cada término de la sucesión de Fibonacci se obtiene sumando los dos elementos anteriores. Considere los elementos de la sucesión de Fibonacci menores a 1,000,000,000. Sea \(x\) la suma de los elementos impares, \(y\) la suma de los elementos pares. Encuentre \(z={x/y}\)

#la sucesion de fibonacci esta dada por la sigueinte expresion, hay que ver hasta que n es menor a 1000000000
#Construccion de sucesion de Fibonacci
#install.packages("gmp") ##Paqueteria para poder trabajar con numeros muy grandes
require(gmp)  
## Loading required package: gmp
## 
## Attaching package: 'gmp'
## The following objects are masked from 'package:base':
## 
##     %*%, apply, crossprod, matrix, tcrossprod
fibonesimo <- function(n) { #construimos una funcion que nos devuelva el n-esimo elemneto de la sucesion de fibonacci
  j = 0
  k = 1
  for (i in 1:n) {
    l = k
    k = j
    j = add.bigz(j, l)  #  funcion sumas de numeros grandes
  }
  return(j)
}

fa=1
x=0
y=0
repeat
if(fibonesimo(fa)<1000000000){
  if(fibonesimo(fa)%%2==0){
    y=y+fibonesimo(fa)
  }else{
    x=x+fibonesimo(fa)
  }
  
  fa=fa+1

  }else{break}
x
## Big Integer ('bigz') :
## [1] 1485607536
y
## Big Integer ('bigz') :
## [1] 350704366
z=x/y
z
## Big Rational ('bigq') :
## [1] 742803768/175352183

5

Ahora considere los primeros \(10n\) elementos de la sucesión de Fibonacci con \(n\in(1,200)\), sean \(x\) el número de elementos impares, \(y\) el número de elementos pares y \(z={x/y}\). Haga un gráfico interactivo del vector de \(z's\) . Explique un par de insights interesantes sobre el ejercicio.

X<-numeric(200)

Y<-numeric(200)

Z<-numeric(200)


for(n in 1:200){
 h=(10*n)
  
 if(n==1){
  for(j in 1:h){
    
     if(fibonesimo(j)%%2==0)
       {
        Y[n]=Y[n]+1
      }else{
        X[n]=X[n]+1
      }
  }}else{
     Y[n]=Y[n-1]
    X[n]=X[n-1]
    s=(10*(n-1))+1
       for(j in s:h){
    
     if(fibonesimo(j)%%2==0)
       {
        Y[n]=Y[n]+1
      }else{
        X[n]=X[n]+1
      }
  }
    
  }

  Z[n]=X[n]/Y[n] 
  
   }

X
##   [1]    7   14   20   27   34   40   47   54   60   67   74   80   87   94
##  [15]  100  107  114  120  127  134  140  147  154  160  167  174  180  187
##  [29]  194  200  207  214  220  227  234  240  247  254  260  267  274  280
##  [43]  287  294  300  307  314  320  327  334  340  347  354  360  367  374
##  [57]  380  387  394  400  407  414  420  427  434  440  447  454  460  467
##  [71]  474  480  487  494  500  507  514  520  527  534  540  547  554  560
##  [85]  567  574  580  587  594  600  607  614  620  627  634  640  647  654
##  [99]  660  667  674  680  687  694  700  707  714  720  727  734  740  747
## [113]  754  760  767  774  780  787  794  800  807  814  820  827  834  840
## [127]  847  854  860  867  874  880  887  894  900  907  914  920  927  934
## [141]  940  947  954  960  967  974  980  987  994 1000 1007 1014 1020 1027
## [155] 1034 1040 1047 1054 1060 1067 1074 1080 1087 1094 1100 1107 1114 1120
## [169] 1127 1134 1140 1147 1154 1160 1167 1174 1180 1187 1194 1200 1207 1214
## [183] 1220 1227 1234 1240 1247 1254 1260 1267 1274 1280 1287 1294 1300 1307
## [197] 1314 1320 1327 1334
Y
##   [1]   3   6  10  13  16  20  23  26  30  33  36  40  43  46  50  53  56
##  [18]  60  63  66  70  73  76  80  83  86  90  93  96 100 103 106 110 113
##  [35] 116 120 123 126 130 133 136 140 143 146 150 153 156 160 163 166 170
##  [52] 173 176 180 183 186 190 193 196 200 203 206 210 213 216 220 223 226
##  [69] 230 233 236 240 243 246 250 253 256 260 263 266 270 273 276 280 283
##  [86] 286 290 293 296 300 303 306 310 313 316 320 323 326 330 333 336 340
## [103] 343 346 350 353 356 360 363 366 370 373 376 380 383 386 390 393 396
## [120] 400 403 406 410 413 416 420 423 426 430 433 436 440 443 446 450 453
## [137] 456 460 463 466 470 473 476 480 483 486 490 493 496 500 503 506 510
## [154] 513 516 520 523 526 530 533 536 540 543 546 550 553 556 560 563 566
## [171] 570 573 576 580 583 586 590 593 596 600 603 606 610 613 616 620 623
## [188] 626 630 633 636 640 643 646 650 653 656 660 663 666
Z
##   [1] 2.333333 2.333333 2.000000 2.076923 2.125000 2.000000 2.043478
##   [8] 2.076923 2.000000 2.030303 2.055556 2.000000 2.023256 2.043478
##  [15] 2.000000 2.018868 2.035714 2.000000 2.015873 2.030303 2.000000
##  [22] 2.013699 2.026316 2.000000 2.012048 2.023256 2.000000 2.010753
##  [29] 2.020833 2.000000 2.009709 2.018868 2.000000 2.008850 2.017241
##  [36] 2.000000 2.008130 2.015873 2.000000 2.007519 2.014706 2.000000
##  [43] 2.006993 2.013699 2.000000 2.006536 2.012821 2.000000 2.006135
##  [50] 2.012048 2.000000 2.005780 2.011364 2.000000 2.005464 2.010753
##  [57] 2.000000 2.005181 2.010204 2.000000 2.004926 2.009709 2.000000
##  [64] 2.004695 2.009259 2.000000 2.004484 2.008850 2.000000 2.004292
##  [71] 2.008475 2.000000 2.004115 2.008130 2.000000 2.003953 2.007812
##  [78] 2.000000 2.003802 2.007519 2.000000 2.003663 2.007246 2.000000
##  [85] 2.003534 2.006993 2.000000 2.003413 2.006757 2.000000 2.003300
##  [92] 2.006536 2.000000 2.003195 2.006329 2.000000 2.003096 2.006135
##  [99] 2.000000 2.003003 2.005952 2.000000 2.002915 2.005780 2.000000
## [106] 2.002833 2.005618 2.000000 2.002755 2.005464 2.000000 2.002681
## [113] 2.005319 2.000000 2.002611 2.005181 2.000000 2.002545 2.005051
## [120] 2.000000 2.002481 2.004926 2.000000 2.002421 2.004808 2.000000
## [127] 2.002364 2.004695 2.000000 2.002309 2.004587 2.000000 2.002257
## [134] 2.004484 2.000000 2.002208 2.004386 2.000000 2.002160 2.004292
## [141] 2.000000 2.002114 2.004202 2.000000 2.002070 2.004115 2.000000
## [148] 2.002028 2.004032 2.000000 2.001988 2.003953 2.000000 2.001949
## [155] 2.003876 2.000000 2.001912 2.003802 2.000000 2.001876 2.003731
## [162] 2.000000 2.001842 2.003663 2.000000 2.001808 2.003597 2.000000
## [169] 2.001776 2.003534 2.000000 2.001745 2.003472 2.000000 2.001715
## [176] 2.003413 2.000000 2.001686 2.003356 2.000000 2.001658 2.003300
## [183] 2.000000 2.001631 2.003247 2.000000 2.001605 2.003195 2.000000
## [190] 2.001580 2.003145 2.000000 2.001555 2.003096 2.000000 2.001531
## [197] 2.003049 2.000000 2.001508 2.003003

6

Escriba una función que encuentre los números primos entre \(1\) y \(n\). Haga un gráfico animado de la proporción de números primos en los primeros \(10k\) naturales con \(k\in(1:100)\)

Para este ejercicio primero hacemos una funcion que si nosotros le damos un numero \(n\), nos devuelva la cantidad de numeros primos del \(1\) hasta ese \(n\).Una vez hecho esto procedemos a contar cuantos hay para los primeros \(10k\) naturales con \(k\in(1:100)\), y los metemos en un vector donde la k-ésima entrada del vector representa justamente cuantos primos hay en los primeros \(10k\) naturales

fprimos <-function(n){
  cont=1
  j=1
  
  for(j in 1:n){
    h=1
    aux=0
    for(h in 1:j) {
      if(j%%h==0){
        aux = aux +1
      }
    }
    if(aux==2){
      cont=cont+1
    }
  }
  return(cont)
}
P<-numeric(100)

k=1
for(k in 1:100){
  hk=10*k
  P[k]=fprimos(hk)
  
}
P
##   [1]   5   9  11  13  16  18  20  23  25  26  30  31  32  35  36  38  40
##  [18]  42  43  47  47  48  51  53  54  56  58  60  62  63  64  67  67  69
##  [35]  71  73  74  76  78  79  81  82  83  86  88  89  92  93  94  96  98
##  [52]  98 100 100 102 103 105 107 108 110 112 115 115 116 119 121 122 124
##  [69] 125 126 128 129 130 132 133 135 137 138 139 140 141 142 146 147 147
##  [86] 150 151 152 155 155 156 158 159 160 162 163 164 166 167 169