diff --git a/.gitignore b/.gitignore
index 524f096..e5bef0c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,3 +22,6 @@
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
replay_pid*
+
+# IntelliJ IDEA
+.idea
diff --git a/gcd.iml b/gcd.iml
new file mode 100644
index 0000000..c90834f
--- /dev/null
+++ b/gcd.iml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Main.java b/src/Main.java
new file mode 100644
index 0000000..379fa76
--- /dev/null
+++ b/src/Main.java
@@ -0,0 +1,50 @@
+import java.util.ArrayList;
+import java.util.List;
+
+public class Main {
+ public static void main(String[] args) {
+ int a = 48;
+ int b = 18;
+
+ int normalResult = normalGcd(a, b);
+ int euclideanResult = euclideanGcd(a, b);
+
+ System.out.printf("Normal gcd: %d%n", normalResult);
+ System.out.printf("Euclidean gcd: %d%n", euclideanResult);
+ }
+
+ public static int normalGcd(int a, int b) {
+ List factorsA = primeFactors(a);
+ List factorsB = primeFactors(b);
+ int gcd = 1;
+ for (int i = 0; i < factorsA.size(); i++) {
+ int factor = factorsA.get(i);
+ if (factorsB.contains(factor)) {
+ gcd *= factor;
+ factorsB.remove((Integer) factor);
+ }
+ }
+ return gcd;
+ }
+
+ private static List primeFactors(int n) {
+ List factors = new ArrayList<>();
+ for (int i = 2; i * i <= n; i++) {
+ while (n % i == 0) {
+ factors.add(i);
+ n /= i;
+ }
+ }
+ if (n > 1) factors.add(n);
+ return factors;
+ }
+
+ public static int euclideanGcd(int a, int b) {
+ while (b != 0) {
+ int temp = b;
+ b = a % b;
+ a = temp;
+ }
+ return a;
+ }
+}
\ No newline at end of file