C++ 如何使用MPIR素数测试器mpz_likely_Prime_p和mpz_probable_Prime_p?
我正在尝试使用MPIR的prime tester进行快速非顺序测试;然而,我是MPIR新手,对它们的用法感到困惑——特别是函数使用的“gmp\u randstate\u t”参数。以下是到目前为止我得到的信息:C++ 如何使用MPIR素数测试器mpz_likely_Prime_p和mpz_probable_Prime_p?,c++,mpir,C++,Mpir,我正在尝试使用MPIR的prime tester进行快速非顺序测试;然而,我是MPIR新手,对它们的用法感到困惑——特别是函数使用的“gmp\u randstate\u t”参数。以下是到目前为止我得到的信息: #include<iostream> // used for cout #include<mpir.h> int main() { mpz_t PrimeCanidate; mpz_init(PrimeCanidate); mpz_set
#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;
}
}
#include//用于cout
#包括
int main(){
mpz_t PrimeCanidate;
mpz_init(PrimeCanidate);
mpz_set_ui(PrimeCanidate,3);//将PrimeCanidate设置为无符号int“3”
if(mpz_可能_素数_p(素数)==1){
std::cout经过一系列的修改,我找到了如何正确初始化mpz_like_prime_p的“state”和div“参数。下面是一个计算和打印介于1和100之间的素数的示例:
#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;
}
}
}
#include//用于cout
#包括
int main(){
mpz_t PrimeCanidate;
mpz_init(PrimeCanidate);
mpz_set_ui(PrimeCanidate,2);
mpz_t加法器;
mpz_init(加法器);
mpz_集_ui(加法器,1);
gmp_randstate_t state;
gmp\u randinit\u默认值(状态);
mpir_ui div=0;
int maxbase=100;
对于(int base=2;base std::cout GMP没有此功能,因此您可能希望删除该标记。您是否阅读了文档中有关随机数的章节?@marglisse我试图通过阅读文档了解randstate的用法,并添加了“GMP\u randstate\u t state;对于第二个参数;然而,我仍然不完全理解它,并且仍然坚持获得“div”参数可能不起作用,我对C++也很陌生,但是,这是我第一个被困的地方——因为大多数其他函数都有现有的例子/实现。谢谢注意到它不是GMP中的一个函数——我已经更新了标签和标题。只需通过0
…您至少应该在状态下调用gmp\u randinit\u default
,然后再使用它()。感谢您的提示,就可以了!(已经修改过,以防其他人想使用它)@f9c69e9781fa194211448473495534