首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C Libgcrypt:无法使用libgcrypt检查数字是否为质数

C Libgcrypt:无法使用libgcrypt检查数字是否为质数
EN

Stack Overflow用户
提问于 2012-07-13 13:05:19
回答 2查看 551关注 0票数 1

我正在使用libgcrypt函数gcry_prime_check来测试数字3是否为质数。根据我的函数,3不是质数。我做错了什么?

以下是我的代码

代码语言:javascript
复制
#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;
}

以下是输出

代码语言:javascript
复制
1.4.4
The number tested is: 3
Number is not prime

此外,链接一个很好的教程使用libgcrypt将是一个很大的奖励。谢谢

编辑:

好了,我设法用gcry_prime_generate生成了一个质数,并将其值复制到了number中。结果没能通过质检。但是,当您直接将mpi输出从prime generate传递到prime check函数时...它通过了!

EN

回答 2

Stack Overflow用户

发布于 2012-07-13 15:11:13

这是个窃听器。像大多数质数测试一样,它在进入更昂贵的测试之前,通过小质数值测试整除性。不幸的是,如果你的素数是这些值中的一个,它会被报告为可除(被自身)-因此是复合的。

由于libgcrypt的重点是密码应用程序,所以这样的小素数没有任何用处。不过,这是草率的,不需要太多的努力就能纠正。

票数 1
EN

Stack Overflow用户

发布于 2012-07-13 13:24:25

这是函数原型,它包含一个gcry_mpi_t结构和一个整数。

代码语言:javascript
复制
gcry_error_t gcry_prime_check (gcry_mpi_t p, unsigned int flags)

gcry_mpi_t:此类型表示用于保存MPI的对象。

可以使用gcry_mpi_new函数分配gcry_mpi_t结构

并且可以使用gcry_mpi_set函数进行设置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11464425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档