Compare commits

...

2 Commits

Author SHA1 Message Date
c6250677dd added prime_test_t type 2026-03-27 15:16:44 +01:00
4910520db3 fixed bug with the random generator 2026-03-27 15:16:31 +01:00

40
main.c
View File

@@ -4,6 +4,7 @@
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "helper.c"
@@ -96,38 +97,31 @@ bool prime_test(uint64_t n, int a) {
return false;
}
typedef struct {
int base;
uint64_t prime;
} prime_test_t;
void *prime_thread_worker(void *arg) {
uint64_t *result_ptr = (uint64_t *)arg;
prime_test_t *result_ptr = (prime_test_t *)arg;
do {
*result_ptr = rand64();
result_ptr->prime = rand64();
printf("\nGenerating a new prime number (%p). Candidate: ", result_ptr);
printf("%ju", *result_ptr);
printf("%ju", result_ptr->prime);
printf("\n");
} while (!prime_test(*result_ptr, 2));
} while (!prime_test(result_ptr->prime, result_ptr->base));
return NULL;
}
int main() {
// prime_test(111, 5);
// prime_test(29, 2);
// prime_test(27, 2);
// prime_test(17, 2);
// prime_test(661, 2);
// prime_test(18446744073709551557UL, 2);
// prime_test(18446744073709551533UL, 3);
srand(time(NULL));
uint64_t p = 0;
uint64_t q = 0;
uint64_t base = 2;
pthread_t thread_p, thread_q;
// for (int i = 0; i < 10; i++) {
// p = rand64();
// printf("%ju", p);
// prime_test(p, base);
// }
prime_test_t p = {base, 0};
prime_test_t q = {base, 0};
pthread_create(&thread_p, NULL, prime_thread_worker, &p);
pthread_create(&thread_q, NULL, prime_thread_worker, &q);
@@ -137,15 +131,19 @@ int main() {
printf("\n");
unsigned __int128 n = p * q;
unsigned __int128 n = p.prime * q.prime;
print_uint128(n);
printf("\n");
unsigned __int128 fi_n = (p - 1) * (q - 1);
unsigned __int128 fi_n = (p.prime - 1) * (q.prime - 1);
print_uint128(fi_n);
printf("\n");
// 2. kulcsgeneralas
uint64_t e = 0;
do {
e = rand64();
} while (e <= 1 && e >= fi_n && prime_test(e, base));
return 0;
}