int main(void) { calculateSmallPrimes(); // Calculate primes smaller than 10^6 to speed up primality test. #ifdef TEST FILE *fp; fp = freopen("solovay_strassen_stats.dat", "w", stdout); long long bit_count, rep; for (bit_count = 1; bit_count <= 9; bit_count++) { // Test bit counts of 2, 4, ..., 256, 512 printf("%d", 1 << bit_count); for (rep = 10; rep <= 100; rep += 10) { long long time = testPerformance(1000, 1 << bit_count, rep); printf(" %lld", time); } printf("\n"); } fclose(fp); return 0; #else mpz_t n; mpz_init(n); printf("N: "); if (mpz_inp_str(n, NULL, BASE) == 0) { printf("ERROR\n"); return -1; } int probably_prime = solovay_strassen(n, REPETITIONS); printf("%s\n", probably_prime? "It's probably prime." : "It's composite."); return 0; #endif }
int main(int argc, char* argv[]){ nome_programa = argv[0]; if(argc == 1) uso(); else configura(argc, argv); /*------------------- Solovay-Strassen -------------------*/ if(SS && !MR && !BPSW){ if(!quiet){ std::cout << "Solovay-Strassen -- Contagem de Tempo: "; tempo ? std::cout << "ativada.\n" : std::cout << "desativada.\n"; } while(std::cin >> n >> k){ tempo_decorrido = std::chrono::steady_clock::duration::zero(); inicio = std::chrono::steady_clock::now(); teste = solovay_strassen(n, k); fim = std::chrono::steady_clock::now(); if(teste) std::cout << n << " e provavelmente primo."; else std::cout << n << " e composto."; if(tempo){ tempo_decorrido = std::chrono::duration_cast<std::chrono::duration<double>>(fim - inicio); std::cout << " Tempo de execucao: " << tempo_decorrido.count(); } std::cout << std::endl; } } /*---------------- Miller-Rabin ----------------*/ else if(!SS && MR && !BPSW){
long long measureTime(mpz_t n, int repetitions) { long long start = getTime(); solovay_strassen(n, repetitions); long long end = getTime(); return end - start; // Time in microseconds }