diff --git a/helper.c b/helper.c new file mode 100644 index 0000000..cef6815 --- /dev/null +++ b/helper.c @@ -0,0 +1,25 @@ +#include +#include + +void print_uint128(unsigned __int128 n) { + if (n == 0) { + printf("0\n"); + return; + } + + // A 128-bit number can have up to 39 decimal digits + char buffer[40]; + int i = 0; + + // Extract digits from right to left + while (n > 0) { + buffer[i++] = (n % 10) + '0'; // Convert math digit to character + n /= 10; + } + + // Print them in reverse order (left to right) + while (i > 0) { + putchar(buffer[--i]); + } + putchar('\n'); +} diff --git a/main.c b/main.c index 5e21610..431772d 100644 --- a/main.c +++ b/main.c @@ -4,6 +4,8 @@ #include #include +#include "helper.c" + uint64_t *dec_to_bin(uint64_t d, uint64_t *length) { uint64_t *binary_form = calloc(100, sizeof(uint64_t)); int index = 0; @@ -15,11 +17,6 @@ uint64_t *dec_to_bin(uint64_t d, uint64_t *length) { *length = index; - for (int i = index; i >= 0; i--) { - printf("%ju", binary_form[i]); - } - printf(" index: %d\n", index); - return binary_form; } @@ -66,10 +63,7 @@ bool prime_test(uint64_t n, int a) { while (d % 2 == 0) { d = d / 2; S++; - printf("%ju ", d); } - printf("S: %ju", S); - printf("\n"); uint64_t r = S - 1; // this stores the number of elements from 0 to S-1 @@ -81,7 +75,6 @@ bool prime_test(uint64_t n, int a) { if ((first_qp_res = quick_pow(d_binary, a, n, length)) == 1) { free(d_binary); - printf("true\n"); return true; } @@ -98,7 +91,6 @@ bool prime_test(uint64_t n, int a) { } } - printf("\nfalse\n\n"); free(d_binary); return false; } @@ -111,5 +103,25 @@ int main() { prime_test(661, 2); prime_test(18446744073709551557UL, 2); prime_test(18446744073709551533UL, 3); + + uint64_t p = 11; + uint64_t q = 29; + + // probably i should generate instead of asking the user to input + if (!prime_test(p, 2) || !prime_test(q, 2)) { + printf("given numbers were not primes"); + return 1; + } + + printf("\n"); + + unsigned __int128 n = p * q; + print_uint128(n); + printf("\n"); + + unsigned __int128 fi_n = (p - 1) * (q - 1); + print_uint128(fi_n); + printf("\n"); + return 0; }