首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用MPIR Prime测试仪mpz_likely_prime_p和mpz_probable_prime_p?

如何使用MPIR Prime测试仪mpz_likely_prime_p和mpz_probable_prime_p?
EN

Stack Overflow用户
提问于 2021-01-07 08:01:59
回答 1查看 54关注 0票数 1

我正在尝试使用MPIR的prime测试器进行快速非顺序测试;然而,我是MPIR的新手,并且对它们的用法感到困惑--特别是函数使用的"gmp_randstate_t“参数。这是我到目前为止所得到的:

代码语言:javascript
复制
#include<iostream> // used for cout
#include<mpir.h>

int main() {
    mpz_t PrimeCanidate;
    mpz_init(PrimeCanidate);
    mpz_set_ui(PrimeCanidate, 3); // sets PrimeCanidate to unsigned int "3"

    if (mpz_likely_prime_p(PrimeCanidate) == 1) {
        std::cout << "Number is prime: " << std::endl;
    }
}

因为我只在mpz_likely_prime_p中使用了一个参数,所以它不起作用--我只是不知道它在文档(http://www.mpir.org/mpir-3.0.0.pdf pg )中所显示的其他参数(状态,目录)中寻找什么。42):

会有人碰巧有一个简单的代码来使用MPIR中的质数测试函数吗?非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2021-01-07 17:59:05

经过多次修改,我想出了如何正确初始化mpz_likely_prime_p的“状态”和“div”参数。下面是一个计算和打印1到100之间的素数的示例:

代码语言:javascript
复制
#include<iostream> // used for cout
#include<mpir.h>

int main() {

    mpz_t PrimeCanidate;
    mpz_init(PrimeCanidate);
    mpz_set_ui(PrimeCanidate, 2);

    mpz_t additor;
    mpz_init(additor);
    mpz_set_ui(additor, 1);

    gmp_randstate_t state;
    gmp_randinit_default(state);

    mpir_ui div = 0;
    
    int maxbase = 100;
    for (int base = 2; base < maxbase; base++) {
        mpz_add(PrimeCanidate, PrimeCanidate, additor); // repeatedly adds one to PrimeCanidate
        std::cout << "Tested Number: " << PrimeCanidate << std::endl;

        if (mpz_likely_prime_p(PrimeCanidate, state, div) == 1) {
            std::cout << PrimeCanidate << " is prime." << std::endl;
        }
    }
}

这可能不是最优的,但它是有效的,并且可能是一个很好的起点。

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

https://stackoverflow.com/questions/65604937

复制
相关文章

相似问题

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