在ACM竞赛中,如何利用数论算法模板快速判断一个大整数是否为素数,并给出相应的C++代码实现?
时间: 2024-11-02 22:22:56 浏览: 14
在ACM算法模板集中,判断一个大整数是否为素数通常会使用到素数筛法、Miller-Rabin素性测试等高效算法。这些模板能够帮助我们快速实现素数判断功能,尤其在处理大数据时显得尤为重要。以下是一个使用Miller-Rabin素性测试的C++代码实现示例:
参考资源链接:[史上最全ACM算法模板集——223页精华PDF](https://wenku.csdn.net/doc/64smrgz4pe?spm=1055.2569.3001.10343)
```cpp
#include <iostream>
#include <cmath>
using namespace std;
typedef long long ll;
const int mod = ***;
ll quick_pow(ll a, ll b, ll p) {
ll ans = 1;
while (b) {
if (b % 2) ans = (ans * a) % p;
a = (a * a) % p;
b /= 2;
}
return ans;
}
bool miller_rabin(ll n, ll d) {
ll x = quick_pow(2, d, n - 1);
if (x == 1 || x == n - 1) return true;
while (d != n - 1) {
x = (x * x) % n;
d *= 2;
if (x == 1) return false;
if (x == n - 1) return true;
}
return false;
}
bool is_prime(ll n, int s = 5) {
if (n <= 1) return false;
if (n <= 3) return true;
ll d = n - 1;
while ((d & 1) == 0) d /= 2;
for (int i = 0; i < s; ++i) {
if (!miller_rabin(n, d)) return false;
}
return true;
}
int main() {
ll n;
while (cin >> n) {
if (is_prime(n)) {
cout <<
参考资源链接:[史上最全ACM算法模板集——223页精华PDF](https://wenku.csdn.net/doc/64smrgz4pe?spm=1055.2569.3001.10343)
阅读全文