c语言素数域GF(p)全部非零元素加法和乘法逆元
时间: 2023-08-16 18:04:33 浏览: 139
在C语言中,可以用扩展欧几里得算法来计算GF(p)中的非零元素的乘法逆元。下面给出一个示例代码:
```c
#include <stdio.h>
// 扩展欧几里得算法求a在GF(p)中的乘法逆元
int inverse(int a, int p)
{
int x1 = 1, y1 = 0;
int x2 = 0, y2 = 1;
int r1 = a, r2 = p;
while (r2 > 0) {
int q = r1 / r2;
int tmp;
tmp = r1 - q * r2;
r1 = r2;
r2 = tmp;
tmp = x1 - q * x2;
x1 = x2;
x2 = tmp;
tmp = y1 - q * y2;
y1 = y2;
y2 = tmp;
}
return (x1 + p) % p;
}
int main()
{
int p = 5; // 素数p
int i;
// 非零元素加法逆元
for (i = 1; i < p; i++) {
printf("GF(%d)中%d的加法逆元是%d\n", p, i, p-i);
}
// 非零元素乘法逆元
for (i = 1; i < p; i++) {
int inv = inverse(i, p);
printf("GF(%d)中%d的乘法逆元是%d\n", p, i, inv);
}
return 0;
}
```
在上面的代码中,`inverse`函数接受两个参数:一个非零元素a和一个素数p,返回a在GF(p)中的乘法逆元。在主函数中,先计算了所有非零元素的加法逆元,然后计算了所有非零元素的乘法逆元。
阅读全文