- 注册时间
- 2007-12-28
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 12787
- 在线时间
- 小时
|
发表于 2011-6-17 01:11:19
|
显示全部楼层
这里给出完整的代码。- #include <stdio.h>
- #include <tchar.h>
- #include <windows.h>
- #include <stdlib.h>
- #include <time.h>
-
- #include "include/gmp.h"
- #pragma comment( lib, "lib/gmp.lib" /*"lib/gmp.lib"*/ )
-
- #define MAX_BIT 2048
-
- void SetFullF(char *p, int sizes) //全部填充为F
- {
- p[0] = 'F'; //保证达到特定大小
- for (int i = 0; i < sizes; i ++)
- {
- p[i] = 'F';
- }
- p[i]=0;
- }
-
- void test_findPrime()
- {
- mpz_t gmp_N, gmp_r, gmp_q;
- gmp_randstate_t state;
-
- LARGE_INTEGER CountFreq, start, stop;
- double UsedTime;
- int bits;
- char *pA;
-
- bits=MAX_BIT;
- QueryPerformanceFrequency(&CountFreq);
- SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);
-
- gmp_randinit_default(state); //设置随机初始状态
-
- //初始化
- mpz_init(gmp_N);
- mpz_init(gmp_r);
- mpz_init(gmp_q);
-
- pA = (char *)malloc( bits/4 + 1 );
- SetFullF(pA, bits/4);
- mpz_set_str(gmp_N, pA, 16);
-
- QueryPerformanceCounter(&start);
- mpz_urandomm(gmp_r, state, gmp_N); //得到N以下随机一个数,赋给r
- mpz_nextprime(gmp_q, gmp_r); //求得r的下一次素数,赋给q
- QueryPerformanceCounter(&stop);
- UsedTime = (double)(stop.QuadPart - start.QuadPart) / (double)CountFreq.QuadPart ;
-
- gmp_printf ("n= %Zd\n", gmp_N);
- gmp_printf ("r= %Zd\n", gmp_r);
- gmp_printf ("q= %Zd\n", gmp_q);
- printf("计算时间:%.3fs\n", UsedTime);
-
- mpz_clear(gmp_N); //释放内存
- mpz_clear(gmp_r); //释放内存
- mpz_clear(gmp_q); //释放内存
- }
-
-
- int main(int argc, _TCHAR* argv[])
- {
- test_findPrime();
- return 0;
- return 0;
- }
复制代码 |
|