题目:
生成两个随机的大素数p和q,分别有512比特长。
把p和q相乘,赋值为n。
求比n小且与n互素的整数的个数,记为euler,并输出:p、q、n和euler
#include <stdio.h>
#include <gmp.h>
#include<time.h>
int main()
{
clock_t time = clock();
gmp_randstate_t grt;
gmp_randinit_default(grt);
gmp_randseed_ui(grt, time);
mpz_t p;
mpz_init(p);
mpz_urandomb(p, grt, 512);
mpz_nextprime(p, p);
mpz_t q;
mpz_init(q);
mpz_urandomb(q, grt, 512);
mpz_nextprime(q, q);
mpz_t n;
mpz_init(n);
mpz_mul(n, p, q);
mpz_t euler;//euler=n-p-q+1
mpz_init(euler);
mpz_sub(euler, n, p);
mpz_sub(euler, euler,q);
mpz_add_ui(euler, euler, 1);
gmp_printf("p = %Zd\n\n", p);
gmp_printf("q = %Zd\n\n", q);
gmp_printf("n = %Zd\n\n", n);
gmp_printf("euler = %Zd\n\n", euler);
return 0;
}