MillerRabin素性测试(数论:素数Template)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MillerRabin素性测试(数论:素数Template)相关的知识,希望对你有一定的参考价值。

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long LL;
 4 #define random(a , b) ((a) + rand() % ((b) - (a) + 1))
 5 LL QuickPower(LL a , LL b , LL p)
 6 {
 7     LL yaoyuan = 1;
 8     while(b)
 9     {
10         if(b & 1)   yaoyuan = yaoyuan * a % p;
11         a = a * a % p;
12         b >>= 1;
13     }
14     return yaoyuan;
15 }
16 bool MillerRabin(LL p)
17 {
18     for(int i = 1 ; i <= 50 ; ++i)
19     {
20         LL a = random(1 , p - 1);
21         if(QuickPower(a , p - 1 , p) != 1)
22         {
23             return 0;
24         }
25     }
26     return 1;
27 }
28 int main()
29 {
30     LL p = 0;
31     int t;
32     scanf("%d" , &t);
33     while(t--)
34     {
35         scanf("%lld" , &p);
36         if(MillerRabin(p))
37         {
38             printf("Yes\n");
39         }
40         else
41         {
42             printf("No\n");
43         }
44     }
45 }

 

以上是关于MillerRabin素性测试(数论:素数Template)的主要内容,如果未能解决你的问题,请参考以下文章

专题数论

数论——素数和反素数

Prime Test POJ - 1811(素性检测+大数分解)

用 C++ 中的 AKS 素性测试计算孪生素数我做错了啥?

急急急 求大神帮忙 用vc++ 生成1024位大素数 用到米勒拉宾素性测试

图个安心的数论类简单模板