diff --git a/MonteCarloIntegration/monte_carlo_integration.py b/MonteCarloIntegration/Python/monte_carlo_integration.py
similarity index 100%
rename from MonteCarloIntegration/monte_carlo_integration.py
rename to MonteCarloIntegration/Python/monte_carlo_integration.py
diff --git a/MonteCarloIntegration/Rust/Cargo.lock b/MonteCarloIntegration/Rust/Cargo.lock
new file mode 100644
index 0000000000000000000000000000000000000000..01320a8b9722d57e7569f658e22a44e8e6d061f8
--- /dev/null
+++ b/MonteCarloIntegration/Rust/Cargo.lock
@@ -0,0 +1,84 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "cfg-if"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
+
+[[package]]
+name = "getrandom"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.71"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9457b06509d27052635f90d6466700c65095fdf75409b3fbdd903e988b886f49"
+
+[[package]]
+name = "monte_carlo_integration"
+version = "0.1.0"
+dependencies = [
+ "rand",
+]
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "237a5ed80e274dbc66f86bd59c1e25edc039660be53194b5fe0a482e0f2612ea"
+
+[[package]]
+name = "rand"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
+dependencies = [
+ "getrandom",
+ "libc",
+ "rand_chacha",
+ "rand_core",
+ "rand_hc",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
+dependencies = [
+ "rand_core",
+]
+
+[[package]]
+name = "wasi"
+version = "0.9.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
diff --git a/MonteCarloIntegration/Rust/Cargo.toml b/MonteCarloIntegration/Rust/Cargo.toml
new file mode 100644
index 0000000000000000000000000000000000000000..dc5b8d3d63f82d61ef75e545a73b12ae14b5388d
--- /dev/null
+++ b/MonteCarloIntegration/Rust/Cargo.toml
@@ -0,0 +1,10 @@
+[package]
+name = "monte_carlo_integration"
+version = "0.1.0"
+authors = ["Thomas J. Kennedy <tkennedy@cs.odu.edu>"]
+edition = "2018"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+rand = "0.7"
diff --git a/MonteCarloIntegration/Rust/src/main.rs b/MonteCarloIntegration/Rust/src/main.rs
new file mode 100644
index 0000000000000000000000000000000000000000..5f52c11653ebc40f77bf7c73bf29566b03a6467c
--- /dev/null
+++ b/MonteCarloIntegration/Rust/src/main.rs
@@ -0,0 +1,62 @@
+use rand::prelude::*;
+use std::env;
+
+struct Point(f64, f64);
+
+/// Generate a sequence of random x values and plug them into f(x).
+///
+/// Args:
+///     f: mathematical function
+///     lower_limit: 'a' the lower bound
+///     upper_bound: 'b' the upper bound
+///     n: number of points to generate
+///
+/// Yields:
+///     A sequence of points in the form (x, f(x))
+
+fn generate_random_points(f: fn(f64) -> f64,
+                          lower_limit: f64,
+                          upper_limit: f64,
+                          n: u64) -> Vec<Point> {
+
+    let d = rand::distributions::Uniform::new_inclusive(lower_limit, upper_limit);
+    let mut rng = thread_rng();
+
+    (0..n).map(|_| {
+        let x = rng.sample(d);
+        Point(x, f(x))
+    }).collect()
+}
+
+/// This main demonstrates the impact of the number of points on Monte Carlo
+/// integration
+fn main() {
+
+
+    let num_points = env::args().nth(1).unwrap().parse::<u64>(); // Unused in this version of main
+    let limit_a = env::args().nth(2).unwrap().parse::<f64>().unwrap();
+    let limit_b = env::args().nth(3).unwrap().parse::<f64>().unwrap();
+    let max_magnitude = env::args().nth(4).unwrap().parse::<u32>().unwrap();
+
+    let math_f = |x: f64| x.powf(2_f64);
+
+    println!("| {:^16} | {:^20} |", "# Points", "Est. f(x)");
+
+    let max_num_points: u64 = 2_u64.pow(max_magnitude);
+    let point_sequence = (generate_random_points(math_f, limit_a, limit_b, max_num_points));
+
+    for magnitude in 0..=max_magnitude {
+        let num_points = 2_u64.pow(magnitude);
+
+        let sum_of_f_of_x_values: f64 = point_sequence.iter()
+            .map(|point| point.1)
+            .take((num_points as usize))
+            .sum();
+
+        let integral_result = (limit_b - limit_a) /
+                              (num_points as f64) *
+                              sum_of_f_of_x_values;
+
+        println!("| {:>16} | {:^20.8} |", num_points, integral_result);
+    }
+}