扩展欧几里得(求逆元)

博主尝试使用扩展欧几里得算法求逆元并解决相关问题,但遇到了错误。通过分享代码及过程,探讨了算法实现细节及其在实际编程任务中的应用。

昨天看了一下逆元,有费马小定理求逆元,扩展费马小定理求逆元,最重要的是有一个扩展欧几里得求逆元,我只是看了一下,并没有做题,今天做了一下,直接给wrong了,我也是没有话可说了,我还是太水。

题目链接:点击打开链接

代码:

#include<stdio.h>
#define  mod 9973
#include<string.h>
#include <iostream>
using namespace std;
int extended_gcd(int a,int b, int &x, int &y)
{
    if (b == 0)
    {
        x = 1;
        y = 0;
        return a;
    }
    else
    {
        int gcd = extended_gcd(b, a % b, x, y);
        int t = x;
        x = y;
        y = t - (a / b) * y;
        return gcd;
    }
}
//int main()
//{
//    int i, x, y;
//    const int P = 13;
//    for (i = 1; i < P; ++i)
//    {
//        extended_gcd(i, P, x, y);
//        while (x < 0) x += P;
//        printf("1 div %d = %d\n", i, x);
//    }
//    return 0;
//}
//int main()
//{
//    LL a, b, t;
//    scanf("%lld",&t);
//    while(t--)
//    {
//        scanf("%lld%lld",&a,&b);
//        LL ans = cal(a, b, 1);
//        if(ans == -1)
//        {
//            printf("Not Exist\n");
//            continue;
//        }
//        printf("%lld\n",ans);//x
//    }
//    return 0;
//}
//int  extgcd(int a,int b,int &x,int &y)
//{
//    int d=a;
//    if(b!=0)
//    {
//        d=extgcd(b,a%b,y,x);
//        y-=(a/b)*x;
//
//    }
//    else
//
//    {
//        x=1;
//        y=0;
//    }
//    return d;
//}
int sum[100010],q[100010];
char w[100010];
int main()
{


    for(int i=1; i<mod; i++)
    {
        int x,y;

        extended_gcd(i, mod, x, y);
        while (x < 0) x += mod;
        q[i]=x;
    }

    int a;
    while(~scanf("%d",&a))
    {
        scanf("%s",w);
        int s=strlen(w);
        sum[0]=1;
        for(int i=0; i<s; i++)
            sum[i+1]=sum[i]*(w[i]-28)%mod;
        int q1,q2;
        for(int i=0; i<a; i++)
        {
            scanf("%d%d",&q1,&q2);
            printf("%d\n",sum[q2]*q[sum[q1-1]]%mod);
        }

    }
    return 0;
}
原来写了一个模板,是扩展欧几里得,后来不知道怎么就错了,我也是不知道怎么回事,那个模板好像是求求解线性方程时候的模板,然后就错了,我还是太水。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值