我正在使用libgcrypt函數gcry_prime_check
來測試數字3
是否爲素數。原來根據我的功能3不是素數。我究竟做錯了什麼?C Libgcrypt:無法使用libgcrypt檢查數字是否爲素數
這裏是我的代碼
#include <gcrypt.h>
#include <stdio.h>
int main(void)
{
gcry_mpi_t cript_prime;
gcry_error_t err;
char buffer[8] = {0};
char number[8] = {0};
printf("%s\n", gcry_check_version (NULL));
gcry_control(GCRYCTL_INIT_SECMEM, 16384, 0);
cript_prime = gcry_mpi_new(16);
strcpy(number,"3");
gcry_mpi_scan(&cript_prime,GCRYMPI_FMT_USG,number,sizeof(number),NULL);
gcry_mpi_print(GCRYMPI_FMT_USG,buffer,sizeof(buffer),NULL,cript_prime);
printf("The number tested is: %s\n",buffer);
err = gcry_prime_check(cript_prime,4);
if(err)
{
printf("%s\n",gcry_strerror(err));
}
gcry_mpi_release(cript_prime);
return 0;
}
這裏是輸出
1.4.4
The number tested is: 3
Number is not prime
此外,鏈接,使用libgcrypt將是一個巨大的獎賞一個很好的教程。由於
編輯:
好吧,我設法生成使用gcry_prime_generate
一個素數和複製的價值爲number
。原來的檢查失敗了。但是,當你直接將mpi輸出從prime prime傳遞給prime check函數時......它通過了!
嗯那麼gcry_prime_check(...,**無符號整型標誌**)有沒有關於這方面的文檔。我嘗試過從0到4的整數。所有結果都一樣。 – 2012-07-13 05:27:47
mpi.h包含結構體定義 struct gcry_mpi int alloced;/*數組大小(分配的肢體數量)。 */ int nlimbs;/*有效肢體的數量。 */ int sign; \t/*表示負數,並且也用於存儲長度的不透明MPIs,用於 \t \t。 */ 無符號整型標誌;/*位0:要在安全存儲空間中分配的數組*/ /*位2:肢體是指向某些m_alloced數據的指針*/ mpi_limb_t * d;/*四肢陣列*/ };' 它似乎只使用位0和位2,並且僅用於內存管理。 – Luke 2012-07-13 05:51:58
嗯,看看那個 – 2012-07-13 07:22:24