# Black-Scholes parameters
S = 100
K = 100
sigma = 0.25
r = 0.03
t = 1

# other parameters
alpha = 0.05

C <- function(S,K,sigma,r,t) {
    d1 <- (log(S/K) + (r+0.5*sigma^2)*t)/(sigma*sqrt(t))
    d2 <- d1 - sigma*sqrt(t)
    S*pnorm(d1) - K*exp(-r*t)*pnorm(d2)
}

bs_price <- C(S,K,sigma,r,t)

m = (r-0.5*sigma^2)*t
v = sigma*sqrt(t)

z = rnorm(10000)
n = z*v + m
x = exp(n)
payoff = pmax(S*x-K, 0)
mc_price <- mean(payoff)*exp(-r*t)

print(bs_price)
## [1] 11.34848
print(mc_price)
## [1] 11.46502
# stochastic deflator method
m = (alpha - 0.5*sigma^2)*t
v = sigma*sqrt(t)

z = rnorm(10000)
n = z*v + m
x = exp(n)
payoff = pmax(S*x-K,0)
D = dlnorm(S*x, meanlog = log(S) + (r - 0.5*sigma^2), sdlog=sigma) / 
    dlnorm(S*x, meanlog = log(S) + (alpha - 0.5*sigma^2), sdlog=sigma) * exp(-r*t)
df_price <- mean(payoff*D)

print(df_price)
## [1] 11.42453