Skip to content

Instantly share code, notes, and snippets.

@Eunsol-Lee
Created March 22, 2017 21:53
Show Gist options
  • Save Eunsol-Lee/5e8af89199502a5780eb865b4af4bfdf to your computer and use it in GitHub Desktop.
Save Eunsol-Lee/5e8af89199502a5780eb865b4af4bfdf to your computer and use it in GitHub Desktop.
solve <- function(n) {
result <- largeSubtract(largeAdd(sumMultiple(n, 3), sumMultiple(n, 5)), sumMultiple(n, 15))
}
right <- function (string, char){
substr(string,nchar(string)-(char-1),nchar(string))
}
left <- function (string,char){
substr(string,1,char)
}
naToZero <- function(a) {
if (is.na(a)) return (0) else return (a)
}
sumMultiple <- function(n, k) {
n <- n - (n %% k)
left <- n + k
right <- n /k
if (left %% 2 == 0) left <- left / 2 else right <- right / 2
return (largeMultiple(left, right))
}
largeMultiple <- function(a, b) {
aL <- as.integer(a / 100000)
aS <- a %% 100000
bL <- as.integer(b / 100000)
bS <- b %% 100000
# X = (aL + aS) * (bL + bS)
# X = aL*bL + aS*bL + bS*aL + aS*bS
r <- aS*bS
r5 <- aS*bL + bS*aL + as.integer(r/100000)
r <- r %% 100000
r10 <- aL*bL + as.integer(r5/100000)
r5 <- r5 %% 100000
return (paste0(as.character(r10), as.character(r5), as.character(r)))
}
largeAdd <- function (a, b) {
aL <- naToZero(as.double(left(a, nchar(a) - 10)))
aS <- naToZero(as.double(right(a, 10)))
bL <- naToZero(as.double(left(b, nchar(b) - 10)))
bS <- naToZero(as.double(right(b, 10)))
r <- aS + bS
r10 <- aL + bL + as.integer(r / 10000000000)
r <- r %% 10000000000
if (r10 == 0)
return (as.character(r))
else
return (paste0(as.character(r10), as.character(r)))
}
largeSubtract <- function (a, b) {
aL <- naToZero(as.double(left(a, nchar(a) - 10)))
aS <- naToZero(as.double(right(a, 10)))
bL <- naToZero(as.double(left(b, nchar(b) - 10)))
bS <- naToZero(as.double(right(b, 10)))
if (aS < bS) {
r10 <- aL - bL - 1
r <- aS + 10000000000 - bS
}
else {
r10 <- aL - bL
r <- aS - bS
}
if (r10 == 0)
return (as.character(r))
else
return (paste0(as.character(r10), as.character(r)))
}
data <- read.table(file("stdin"), header=F, fill=T, sep="\n")
T <- as.integer(data$V1[1])
for (i in seq(1:T)) {
N <- as.integer(data$V1[i+1])
cat (solve(N-1))
cat('\n')
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment