← Playground

Create UnsignedInt64_Factorization

c56243f7214e272d9b8c47bbe44d2f8811c396e0 · darakna · Jan 11, 2017 01:33

+102 · 1 file changed

  • UnsignedInt64_Factorization +102 −0
diff --git a/UnsignedInt64_Factorization b/UnsignedInt64_Factorization
new file mode 100644
index 0000000..fa71b12
--- /dev/null
+++ b/UnsignedInt64_Factorization
@@ -0,0 +1,102 @@
+// BigNumberFactorization.cpp : Defines the entry point for the console application.
+//
+
+#include "stdafx.h"
+#include "math.h"
+
+
+
+void process_2(unsigned long long int &number, unsigned long long int divs[], unsigned long long int &div_n)
+{
+	while (number % 2 == 0)
+	{
+		number = number / 2;
+		divs[div_n] = 2;
+		div_n++;
+	}
+		
+
+
+}
+
+unsigned long long int number_sum(unsigned long long int is_3_div)
+{
+	int sum = 0;
+	while (is_3_div != 0)
+	{
+		sum += is_3_div % 10;
+		is_3_div = is_3_div / 10;
+	}
+
+	if (sum > 10)
+		return number_sum(sum);
+	else
+		return sum;
+}
+void process_3(unsigned long long int &number, unsigned long long int divs[], unsigned long long int &div_n)
+{
+	while (number_sum(number) % 3 == 0)
+	{
+		number = number / 3;
+		divs[div_n] = 3;
+		div_n++;
+	}
+
+
+
+}
+
+void process_5(unsigned long long int &number, unsigned long long int divs[], unsigned long long int &div_n)
+{
+	while (number % 5 == 0)
+	{
+		number = number / 5;
+		divs[div_n] = 5;
+		div_n++;
+	}
+
+
+
+}
+
+void rest_factors(unsigned long long int &number, unsigned long long int divs[], unsigned long long int &div_n)
+{
+
+	for (unsigned long long int i = 7; i <= sqrt(number); i = i + 2)
+	{
+		if (number % i == 0)
+		{
+			number = number / i;
+			divs[div_n] = i;
+			div_n++;
+			rest_factors(number, divs, div_n);
+		}
+	}
+}
+
+int main()
+{
+	unsigned long long int big_number, factors[100], num_div=0;
+	printf("Enter number: ");
+
+	scanf_s("%I64u", &big_number);
+	printf("Number is: %I64u\n", big_number);
+
+	process_2(big_number, factors, num_div);
+	process_3(big_number, factors, num_div);
+	process_5(big_number, factors, num_div);
+	rest_factors(big_number, factors, num_div);
+
+
+	printf("Biggest factor is: %I64u\n", big_number);
+
+	printf("Number of factors: %I64u\nDivisors: %I64u ", num_div + 1, big_number);
+	for (unsigned long long int i = 0; i < num_div; i++)
+	{
+		printf("%I64u ",factors[num_div - i - 1]);
+	}
+	printf("\n");
+
+    return 0;
+}
+