home *** CD-ROM | disk | FTP | other *** search
- Path: sparky!uunet!olivea!hal.com!darkstar.UCSC.EDU!cats.ucsc.edu!banshee
- From: banshee@cats.ucsc.edu (Wailer at the Gates of Dawn)
- Newsgroups: comp.lang.c
- Subject: Finding Big Primes
- Message-ID: <1h85v1INNmv4@darkstar.UCSC.EDU>
- Date: 22 Dec 92 22:48:01 GMT
- Organization: University of California, Santa Cruz
- Lines: 85
- NNTP-Posting-Host: am.ucsc.edu
-
-
- Here is some code using the gmp 2.1 library to find BIG primes.
- Mersenne Primes.
-
-
- /*
- * Pfinder.c -- Mersenne Prime Locator
- * J. Vinopal banshee@cats.UCSC.EDU
- * 1/12/91
- */
- #include <stdio.h>
- #include "gmp.h"
-
- #define mout(x) (mpz_out_str(stdout, 10, (x)))
-
- main(int argc, char **argv)
- {
- MP_INT Temp_Var, Temp_Var2, Mprime;
- MP_INT Zero, One, Two, Four;
- MP_INT startNum;
- long i, TestPrime, Time1, startPos;
- int savePos;
- FILE *primeFile, *compareFile;
-
-
- if (((primeFile = fopen(argv[1], "r")) == NULL) || (argc < 2)) {
- printf("Can't read data file.\n");
- exit(0);
- }
-
- /* Initialize MINT Constants */
- mpz_init(&Zero);
- mpz_init_set_si(&One, 1L);
- mpz_init_set_si(&Two, 2L);
- mpz_init_set_si(&Four, 4L);
-
- mpz_init(&startNum);
- mpz_init(&Temp_Var);
- mpz_init(&Temp_Var2);
- mpz_init(&Mprime);
-
- /* Read a prime number out of the data file */
- while (fscanf(primeFile, " %ld", &TestPrime) != EOF) {
-
- time(&Time1); /* Get the starting time */
-
- /*
- * Compute Mersenne number
- * Mp = 2 ** P - 1
- */
- mpz_pow_ui(&Temp_Var, &Two, TestPrime);
- mpz_sub(&Mprime, &Temp_Var, &One);
-
- /*
- * Starting Conditions.
- */
- mpz_set(&Temp_Var, &Four);
- i = 2;
-
- /*
- * Calculate Mersenne Prime sequence
- * Temp_Var = (Temp_Var**2 - 2) % Mprime
- */
- for (; i < TestPrime; i++) {
- mpz_powm_ui(&Temp_Var2, &Temp_Var, 2L, &Mprime);
- mpz_sub_ui(&Temp_Var, &Temp_Var2, 2L);
- }
-
- /* Produce Results */
- if (mpz_cmp_ui(&Temp_Var, 0L) == 0) {
- printf("Mersenne prime ");
- printf("%d: ", TestPrime);
- mout(&Mprime);
- printf("\n");
- }
- printf("%ld %ld\n", TestPrime, (time(0) - Time1));
- fflush(stdout);
- }
- }
-
- --
- The Wailer at the Gates of Dawn | banshee@cats.UCSC.EDU |
- Just who ARE you calling a FROOFROO Head? | |
- DoD#0667 "Just a friend of the beast." | banshee@ucscb.UCSC.EDU |
- 2,3,5,7,13,17,19,31,61,89,107,127,521,607....| banshee@ucscb.BITNET |
-