# install.packages("primes")
library(primes)

# Conjecture 1: There exist prime numbers p and q for which p - q = 1000.
q <- generate_primes(1, 100)
q
##  [1]  2  3  5  7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
p <- q + 1000
p
##  [1] 1002 1003 1005 1007 1011 1013 1017 1019 1023 1029 1031 1037 1041 1043 1047
## [16] 1053 1059 1061 1067 1071 1073 1079 1083 1089 1097
test <- is_prime(p)
test
##  [1] FALSE FALSE FALSE FALSE FALSE  TRUE FALSE  TRUE FALSE FALSE  TRUE FALSE
## [13] FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE
## [25]  TRUE
df <- data.frame(q, p, test)
df
##     q    p  test
## 1   2 1002 FALSE
## 2   3 1003 FALSE
## 3   5 1005 FALSE
## 4   7 1007 FALSE
## 5  11 1011 FALSE
## 6  13 1013  TRUE
## 7  17 1017 FALSE
## 8  19 1019  TRUE
## 9  23 1023 FALSE
## 10 29 1029 FALSE
## 11 31 1031  TRUE
## 12 37 1037 FALSE
## 13 41 1041 FALSE
## 14 43 1043 FALSE
## 15 47 1047 FALSE
## 16 53 1053 FALSE
## 17 59 1059 FALSE
## 18 61 1061  TRUE
## 19 67 1067 FALSE
## 20 71 1071 FALSE
## 21 73 1073 FALSE
## 22 79 1079 FALSE
## 23 83 1083 FALSE
## 24 89 1089 FALSE
## 25 97 1097  TRUE
# Conjecture 1 is TRUE.

# Conjecture 2: The inequality 2^x >= x+1 is true for all real numbers x > 0.
x <- 1:100
x
##   [1]   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18
##  [19]  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36
##  [37]  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54
##  [55]  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72
##  [73]  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90
##  [91]  91  92  93  94  95  96  97  98  99 100
power <- 2^x
power
##   [1] 2.000000e+00 4.000000e+00 8.000000e+00 1.600000e+01 3.200000e+01
##   [6] 6.400000e+01 1.280000e+02 2.560000e+02 5.120000e+02 1.024000e+03
##  [11] 2.048000e+03 4.096000e+03 8.192000e+03 1.638400e+04 3.276800e+04
##  [16] 6.553600e+04 1.310720e+05 2.621440e+05 5.242880e+05 1.048576e+06
##  [21] 2.097152e+06 4.194304e+06 8.388608e+06 1.677722e+07 3.355443e+07
##  [26] 6.710886e+07 1.342177e+08 2.684355e+08 5.368709e+08 1.073742e+09
##  [31] 2.147484e+09 4.294967e+09 8.589935e+09 1.717987e+10 3.435974e+10
##  [36] 6.871948e+10 1.374390e+11 2.748779e+11 5.497558e+11 1.099512e+12
##  [41] 2.199023e+12 4.398047e+12 8.796093e+12 1.759219e+13 3.518437e+13
##  [46] 7.036874e+13 1.407375e+14 2.814750e+14 5.629500e+14 1.125900e+15
##  [51] 2.251800e+15 4.503600e+15 9.007199e+15 1.801440e+16 3.602880e+16
##  [56] 7.205759e+16 1.441152e+17 2.882304e+17 5.764608e+17 1.152922e+18
##  [61] 2.305843e+18 4.611686e+18 9.223372e+18 1.844674e+19 3.689349e+19
##  [66] 7.378698e+19 1.475740e+20 2.951479e+20 5.902958e+20 1.180592e+21
##  [71] 2.361183e+21 4.722366e+21 9.444733e+21 1.888947e+22 3.777893e+22
##  [76] 7.555786e+22 1.511157e+23 3.022315e+23 6.044629e+23 1.208926e+24
##  [81] 2.417852e+24 4.835703e+24 9.671407e+24 1.934281e+25 3.868563e+25
##  [86] 7.737125e+25 1.547425e+26 3.094850e+26 6.189700e+26 1.237940e+27
##  [91] 2.475880e+27 4.951760e+27 9.903520e+27 1.980704e+28 3.961408e+28
##  [96] 7.922816e+28 1.584563e+29 3.169127e+29 6.338253e+29 1.267651e+30
test <- power >= x + 1
test
##   [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
##  [16] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
##  [31] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
##  [46] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
##  [61] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
##  [76] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
##  [91] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
df <- data.frame(x,power,test)
df
##       x        power test
## 1     1 2.000000e+00 TRUE
## 2     2 4.000000e+00 TRUE
## 3     3 8.000000e+00 TRUE
## 4     4 1.600000e+01 TRUE
## 5     5 3.200000e+01 TRUE
## 6     6 6.400000e+01 TRUE
## 7     7 1.280000e+02 TRUE
## 8     8 2.560000e+02 TRUE
## 9     9 5.120000e+02 TRUE
## 10   10 1.024000e+03 TRUE
## 11   11 2.048000e+03 TRUE
## 12   12 4.096000e+03 TRUE
## 13   13 8.192000e+03 TRUE
## 14   14 1.638400e+04 TRUE
## 15   15 3.276800e+04 TRUE
## 16   16 6.553600e+04 TRUE
## 17   17 1.310720e+05 TRUE
## 18   18 2.621440e+05 TRUE
## 19   19 5.242880e+05 TRUE
## 20   20 1.048576e+06 TRUE
## 21   21 2.097152e+06 TRUE
## 22   22 4.194304e+06 TRUE
## 23   23 8.388608e+06 TRUE
## 24   24 1.677722e+07 TRUE
## 25   25 3.355443e+07 TRUE
## 26   26 6.710886e+07 TRUE
## 27   27 1.342177e+08 TRUE
## 28   28 2.684355e+08 TRUE
## 29   29 5.368709e+08 TRUE
## 30   30 1.073742e+09 TRUE
## 31   31 2.147484e+09 TRUE
## 32   32 4.294967e+09 TRUE
## 33   33 8.589935e+09 TRUE
## 34   34 1.717987e+10 TRUE
## 35   35 3.435974e+10 TRUE
## 36   36 6.871948e+10 TRUE
## 37   37 1.374390e+11 TRUE
## 38   38 2.748779e+11 TRUE
## 39   39 5.497558e+11 TRUE
## 40   40 1.099512e+12 TRUE
## 41   41 2.199023e+12 TRUE
## 42   42 4.398047e+12 TRUE
## 43   43 8.796093e+12 TRUE
## 44   44 1.759219e+13 TRUE
## 45   45 3.518437e+13 TRUE
## 46   46 7.036874e+13 TRUE
## 47   47 1.407375e+14 TRUE
## 48   48 2.814750e+14 TRUE
## 49   49 5.629500e+14 TRUE
## 50   50 1.125900e+15 TRUE
## 51   51 2.251800e+15 TRUE
## 52   52 4.503600e+15 TRUE
## 53   53 9.007199e+15 TRUE
## 54   54 1.801440e+16 TRUE
## 55   55 3.602880e+16 TRUE
## 56   56 7.205759e+16 TRUE
## 57   57 1.441152e+17 TRUE
## 58   58 2.882304e+17 TRUE
## 59   59 5.764608e+17 TRUE
## 60   60 1.152922e+18 TRUE
## 61   61 2.305843e+18 TRUE
## 62   62 4.611686e+18 TRUE
## 63   63 9.223372e+18 TRUE
## 64   64 1.844674e+19 TRUE
## 65   65 3.689349e+19 TRUE
## 66   66 7.378698e+19 TRUE
## 67   67 1.475740e+20 TRUE
## 68   68 2.951479e+20 TRUE
## 69   69 5.902958e+20 TRUE
## 70   70 1.180592e+21 TRUE
## 71   71 2.361183e+21 TRUE
## 72   72 4.722366e+21 TRUE
## 73   73 9.444733e+21 TRUE
## 74   74 1.888947e+22 TRUE
## 75   75 3.777893e+22 TRUE
## 76   76 7.555786e+22 TRUE
## 77   77 1.511157e+23 TRUE
## 78   78 3.022315e+23 TRUE
## 79   79 6.044629e+23 TRUE
## 80   80 1.208926e+24 TRUE
## 81   81 2.417852e+24 TRUE
## 82   82 4.835703e+24 TRUE
## 83   83 9.671407e+24 TRUE
## 84   84 1.934281e+25 TRUE
## 85   85 3.868563e+25 TRUE
## 86   86 7.737125e+25 TRUE
## 87   87 1.547425e+26 TRUE
## 88   88 3.094850e+26 TRUE
## 89   89 6.189700e+26 TRUE
## 90   90 1.237940e+27 TRUE
## 91   91 2.475880e+27 TRUE
## 92   92 4.951760e+27 TRUE
## 93   93 9.903520e+27 TRUE
## 94   94 1.980704e+28 TRUE
## 95   95 3.961408e+28 TRUE
## 96   96 7.922816e+28 TRUE
## 97   97 1.584563e+29 TRUE
## 98   98 3.169127e+29 TRUE
## 99   99 6.338253e+29 TRUE
## 100 100 1.267651e+30 TRUE
# Conjecture 2 is TRUE.

# Conjecture 3: If n is prime, then 2^n - 1 is prime.
n <- generate_primes(1,100)
n
##  [1]  2  3  5  7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
value <- 2^n - 1
value
##  [1] 3.000000e+00 7.000000e+00 3.100000e+01 1.270000e+02 2.047000e+03
##  [6] 8.191000e+03 1.310710e+05 5.242870e+05 8.388607e+06 5.368709e+08
## [11] 2.147484e+09 1.374390e+11 2.199023e+12 8.796093e+12 1.407375e+14
## [16] 9.007199e+15 5.764608e+17 2.305843e+18 1.475740e+20 2.361183e+21
## [21] 9.444733e+21 6.044629e+23 9.671407e+24 6.189700e+26 1.584563e+29
test <- is_prime(value)
## Warning in is_prime(value): NAs introduced by coercion to integer range
test
##  [1]  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE FALSE FALSE  TRUE FALSE
## [13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [25] FALSE
df <- data.frame(n, value, test)
df
##     n        value  test
## 1   2 3.000000e+00  TRUE
## 2   3 7.000000e+00  TRUE
## 3   5 3.100000e+01  TRUE
## 4   7 1.270000e+02  TRUE
## 5  11 2.047000e+03 FALSE
## 6  13 8.191000e+03  TRUE
## 7  17 1.310710e+05  TRUE
## 8  19 5.242870e+05  TRUE
## 9  23 8.388607e+06 FALSE
## 10 29 5.368709e+08 FALSE
## 11 31 2.147484e+09  TRUE
## 12 37 1.374390e+11 FALSE
## 13 41 2.199023e+12 FALSE
## 14 43 8.796093e+12 FALSE
## 15 47 1.407375e+14 FALSE
## 16 53 9.007199e+15 FALSE
## 17 59 5.764608e+17 FALSE
## 18 61 2.305843e+18 FALSE
## 19 67 1.475740e+20 FALSE
## 20 71 2.361183e+21 FALSE
## 21 73 9.444733e+21 FALSE
## 22 79 6.044629e+23 FALSE
## 23 83 9.671407e+24 FALSE
## 24 89 6.189700e+26 FALSE
## 25 97 1.584563e+29 FALSE
#Conjecture 3 is FALSE.

#Conjecture 4: If n is a natural number, then 1^2 + 2^2 + ... + n^2 = n*(n+1)*(2*n+1)/6.
sum_squares <- function(n) {
  val <- 0
  for (i in 1:n) {
    val <- val + i^2
  }
  val
}
sum_squares(3)
## [1] 14
x <- 1:100
y <- sapply(x, sum_squares)

func <- function(n) {
  return (n*(n+1)*(2*n+1)/6)
}

z <- vector("numeric", length(x))

for (i in seq_along(x)) {
  z[i] <- func(x[i])
}
z
##   [1]      1      5     14     30     55     91    140    204    285    385
##  [11]    506    650    819   1015   1240   1496   1785   2109   2470   2870
##  [21]   3311   3795   4324   4900   5525   6201   6930   7714   8555   9455
##  [31]  10416  11440  12529  13685  14910  16206  17575  19019  20540  22140
##  [41]  23821  25585  27434  29370  31395  33511  35720  38024  40425  42925
##  [51]  45526  48230  51039  53955  56980  60116  63365  66729  70210  73810
##  [61]  77531  81375  85344  89440  93665  98021 102510 107134 111895 116795
##  [71] 121836 127020 132349 137825 143450 149226 155155 161239 167480 173880
##  [81] 180441 187165 194054 201110 208335 215731 223300 231044 238965 247065
##  [91] 255346 263810 272459 281295 290320 299536 308945 318549 328350 338350
z == y
##   [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
##  [16] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
##  [31] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
##  [46] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
##  [61] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
##  [76] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
##  [91] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
# Conjecture 4 is TRUE.