2012-07-13 55 views
1

我正在使用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函數時......它通過了!

回答

0

這是函數原型,它需要一個gcry_mpi_t結構和一個整數。

gcry_error_t gcry_prime_check (gcry_mpi_t p, unsigned int flags) 

gcry_mpi_t:該類型表示一個保存MPI的對象。

gcry_mpi_t結構可以使用gcry_mpi_new功能

進行分配,並可以使用gcry_mpi_set功能進行設置。

+0

嗯那麼gcry_prime_check(...,**無符號整型標誌**)有沒有關於這方面的文檔。我嘗試過從0到4的整數。所有結果都一樣。 – 2012-07-13 05:27:47

+1

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

+0

嗯,看看那個 – 2012-07-13 07:22:24

1

這是一個錯誤。像大多數素數測試一樣,它在測試更昂貴的測試之前,通過小的素數值來測試可分性。不幸的是,如果你的素數是其中的一個數值,那麼它被報告爲可分割的(本身) - 因此是合成的。

因爲libgcrypt的重點是加密應用程序,所以這樣一個小素數沒有用處。雖然這很sl and,但不會花費太多的時間來糾正。

+0

中根本沒有考慮。但是手冊http://www.gnupg.org/documentation/manuals/gcrypt/Prime_002dNumber_002dGenerator-Subsystem-Architecture。素數生成體系結構的html聲明如下:使用質量最高爲4999的標準篩選算法用作快速首次檢查。' – 2012-07-13 07:20:46

+0

相當。所以,我打賭'4999'被宣佈爲合成,'5003'被宣佈爲主。 – 2012-07-13 07:32:40

+0

我試過5003,結果還是一樣。將繼續嘗試,直到可能9973 – 2012-07-13 07:35:36