C语言 辗转相除法求逆
时间: 2023-10-25 20:10:22 浏览: 118
C#辗转相除法
C语言中使用辗转相除法求逆的步骤如下:
1. 首先定义一个函数mod_invese,该函数接收两个整数参数d和n,其中d是被除数,n是除数。
2. 在函数内部,定义变量a、b、q、r、u、v、t,其中a为被除数,b为除数,q为商,r为余数,u和v为辗转相除法中的中间变量,t用于交换u和v的值。
3. 判断d是否大于等于0,如果是,则将d对n取模赋值给b,否则将-d对n取模赋值给b。这样可以保证b为正数。
4. 进入循环,当b不等于0时,执行以下操作:
- 将a除以b得到商q和余数r。
- 将b赋值给a,将r赋值给b。
- 将v赋值给t,将u减去q乘以v得到新的u,将t赋值给v。
5. 循环结束后,判断a是否等于1,如果不等于1,则返回0表示无法求逆;否则,返回u对n取模后的值(确保最后的结果为正数)。
6. 使用mod_invese函数即可求得d关于模n的逆元。
示例代码如下:
```c
int mod_invese(int d, int n) {
int a, b, q, r, u = 0, v = 1, t;
a = n;
b = (d >= 0) ? (d % n) : -(d % n);
while (b != 0) {
q = a / b;
r = a - b * q;
a = b;
b = r;
t = v;
v = u - q * v;
u = t;
}
if (a != 1)
return 0;
return (u < 0) ? (u + n) : u;
}
```
通过使用上述代码,可以实现C语言中使用辗转相除法求逆的功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *3* [辗转相除法求模逆(C语言)](https://blog.csdn.net/qq1013308992/article/details/107166351)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *2* [C语言辗转相除法求2个数的最小公约数](https://download.csdn.net/download/weixin_38576229/12789196)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文