输入素数p,求1~p-1在模p下的逆元,用c语言写出来
时间: 2024-03-09 13:47:56 浏览: 67
C语言简单实现乘法逆元计算的代码
下面是使用欧几里得扩展算法求解1~p-1在模p下的逆元的C语言代码:
```c
#include <stdio.h>
// 求解a在模p意义下的乘法逆元
int mod_inverse(int a, int p) {
int t1 = 0, t2 = 1;
int r1 = p, r2 = a;
int q, r, t;
while (r2 != 0) {
q = r1 / r2;
r = r1 % r2;
t = t1 - q * t2;
r1 = r2;
r2 = r;
t1 = t2;
t2 = t;
}
if (r1 != 1) {
// a在模p意义下没有乘法逆元
return 0;
} else {
// 返回a在模p意义下的乘法逆元
return (t1 + p) % p;
}
}
int main() {
int p, i;
printf("请输入一个素数p:");
scanf("%d", &p);
printf("1~p-1在模%d意义下的乘法逆元为:\n", p);
for (i = 1; i < p; i++) {
int inverse = mod_inverse(i, p);
if (inverse == 0) {
printf("%d没有乘法逆元\n", i);
} else {
printf("%d的逆元为%d\n", i, inverse);
}
}
return 0;
}
```
该代码中,mod_inverse函数使用欧几里得扩展算法求解a在模p意义下的乘法逆元,如果a没有乘法逆元则返回0。在主函数中,循环遍历1~p-1的数,调用mod_inverse函数求解其在模p意义下的乘法逆元,并输出结果。
阅读全文