Esempio n. 1
0
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
}
Esempio n. 2
0
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){
Esempio n. 3
0
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
}