mpz_powm_ui ()   for 5.1.2
    shen lixing 
    shenlixing at hotmail.com
       
    Wed Mar  8 01:17:05 UTC 2017
    
    
  
Hi,
developer!
I installed MinGW, then  'mingw-get install mingw32-gmp' , got the gmp 5.1.2 properly.
mpz_powm_ui ()  give a wrong calculation as below (compared and confirmed by Python):
// 2^(c-1) = 1 mod c^2, c = ?
#include <stdio.h>
#include <time.h>
#include <gmp.h>
int main()
{   printf("hello, world! \n");
    unsigned long long c = 10307e7 - 1;  // change c,start point
    printf("c reach  %llu \n",c);
    mpz_t a,b,d;
    mpz_inits(a,b,d,NULL);
    mpz_set_ui(a,2);
    for (; ;c += 2)
    { if (c % 100000000 == 1)
      { printf("c reach  %llu, %llu \n",c,(unsigned long long)time(NULL));
      }
      mpz_set_ui(b,c);
      mpz_mul_ui(b,b,c);
      mpz_powm_ui(d,a,c-1,b );
      if (mpz_cmp_ui(d,1) == 0)  // c = 1093,3511 are solutions.  why 103079216179 ?
      { printf("found %llu \n",c);
        return 0;
      }
    }
}
I saw a bug report for the mpz_powm_ui () in 5.1.1. from https://gmplib.org.
Regards,
shen lixing
2017/3/8
GNU Multiple Precision Arithmetic Library - gmplib<https://gmplib.org/>
gmplib.org
What is GMP? GMP is a free library for arbitrary precision arithmetic, operating on signed integers, rational numbers, and floating-point numbers.
    
    
More information about the gmp-bugs
mailing list