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