编程实现米勒.拉宾素性检验算法C语言
时间: 2023-07-26 14:36:49 浏览: 184
下面是 Miller-Rabin 素性检验算法的 C 语言实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
// 计算 a 的 b 次方对 c 取余的结果
int mod_pow(int a, int b, int c) {
int res = 1;
while (b > 0) {
if (b & 1) {
res = (res * a) % c;
}
a = (a * a) % c;
b >>= 1;
}
return res;
}
// Miller-Rabin 素性检验算法
int miller_rabin(int n, int k) {
if (n == 2 || n == 3) {
return 1;
}
if (n == 1 || n % 2 == 0) {
return 0;
}
int d = n - 1;
int s = 0;
while (d % 2 == 0) {
d /= 2;
s++;
}
for (int i = 0; i < k; i++) {
int a = rand() % (n - 3) + 2;
int x = mod_pow(a, d, n);
if (x == 1 || x == n - 1) {
continue;
}
int j;
for (j = 0; j < s; j++) {
x = (x * x) % n;
if (x == n - 1) {
break;
}
}
if (j == s) {
return 0;
}
}
return 1;
}
int main() {
int n, k;
printf("请输入一个正整数:");
scanf("%d", &n);
printf("请输入测试次数:");
scanf("%d", &k);
if (miller_rabin(n, k)) {
printf("%d 可能是素数\n", n);
} else {
printf("%d 不是素数\n", n);
}
return 0;
}
```
其中,`mod_pow` 函数与 Fermat 素性检测算法以及 Solovay-Stassen 素性检验算法中的实现相同。`miller_rabin` 函数是 Miller-Rabin 素性检验算法的实现。在 `main` 函数中,首先输入待测试的正整数 `n` 和测试次数 `k`,然后调用 `miller_rabin` 函数进行素性检验,并输出检验结果。
阅读全文