【数学专题】同余

整理的算法模板合集: ACM模板


AcWing 203. 同余方程

在这里插入图片描述

在这里插入图片描述
直接用拓展欧几里得算法求出x0,我们要求的是最小的正整数解,实际上就是 x 0 x_0 x0在1~b之间的值,也就是 x 0   m o d   b x_0\ mod\ b x0 mod b的值,注意为了防止有负数,所以我们的答案应该是 ( x 0   m o d   b + b )   m o d   b (x_0\ mod\ b+ b)\ mod\ b (x0 mod b+b) mod b

#include <cstdio>
#include <algorithm>
#include <iostream>

using namespace std;

const int N = 500007;

int n, m;
int a, b;

int ecgcd(int a, int b, int &x, int &y){
    if(b == 0){
        x = 1, y = 0;
        return a;
    }
    int d = ecgcd(b, a % b, x, y);
    int z = x;x = y;y = z - (a / b) * x;
    return d;
}

int main()
{
    scanf("%d%d", &a, &b);
    int x, y;
    ecgcd(a, b, x, y);
    printf("%d\n", (x % b + b) % b);
    return 0;
}

AcWing 222. 青蛙的约会

在这里插入图片描述

在这里插入图片描述

#include<cstdio>
#include<algorithm>

using namespace std;

const int N = 1e5 + 7;

typedef long long ll;

ll n, m, x, y;
ll a, b, L;

ll exgcd(ll a, ll b, ll &x, ll &y){
    if(b == 0){x = 1;y = 0;return a;}
    ll d = exgcd(b, a % b, x, y);
    ll z = x;x = y;y = z - (a / b) * x;
    return d;
}

int main()
{
    scanf("%lld%lld%lld%lld%lld", &a, &b, &m, &n, &L);
    ll d = exgcd(m - n, L, x, y);
    if((b - a) % d != 0){
        puts("Impossible");
    }
    else {
        x *= (b - a) / d;
        ll t = abs(L / d);
        printf("%lld\n", (x % t + t) % t);
    }
    return 0;
}

AcWing 202. 最幸运的数字

在这里插入图片描述

在这里插入图片描述

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <iostream>

using namespace std;

const int N = 50007;

typedef long long ll;
ll n, m, L;
ll a, b, c, d;
int kcase;

ll gcd(ll a, ll b){
    if(b == 0)return a;
    return gcd(b, a % b);
}

ll mul(ll a, ll b, ll c){
    ll res = 0;
    while(b){
        if(b & 1)res = (res + a) % c;
        a = (a + a) % c;
        b >>= 1;
    }
    return res;
}

ll qpow(ll a, ll b, ll c){
    ll res = 1;
    while(b){
        if(b & 1)res = mul(res, a, c);
        a = mul(a, a, c);
        b >>= 1;
    }
    return res;
}

ll get_euler(ll c){
    ll res = c;
    for(ll i = 2; i * i <= c; ++ i){
        if(c % i == 0){
            while(c % i == 0)c /= i;
            res = res / i * (i - 1);
        }
    }
    if(c > 1)res = res / c * (c - 1);
    return res;
}

int main()
{
    while(scanf("%lld", &L) != EOF && L != 0) {
        
        ll d = gcd(L, 8);
        ll C = 9 * L / d;
        
        ll phi = get_euler(C);
        ll res = 1e18;
        //cout << phi << endl;
        if(C % 2 == 0 || C % 5 == 0)res = 0;
        else {
            for(ll d = 1; d * d <= phi; ++ d){
                if(phi % d == 0){
                    if(qpow(10, d, C) == 1)res = min(res, d);
                    if(qpow(10, phi / d, C) == 1)res = min(res, phi / d);
                }
            }
        }
        printf("Case %d: %lld\n", ++ kcase, res);
    }
    return 0;
}

AcWing 1298. 曹冲养猪

在这里插入图片描述

在这里插入图片描述

#include <algorithm>
#include <cstdio>
#include <cstring>
#include <iostream>

using namespace std;
typedef __int128 ll;
const int N = 50007;

int n;
int a[N];
int m[N];

ll exgcd(ll a, ll b, ll &x, ll &y)
{
    if(b == 0){
        x = 1; y = 0;
        return a;
    }
    ll d = exgcd(b, a % b, x, y);
    ll z = x;x = y;y = z - (a / b) * x;
    return d;
}

int main()
{
    ll M = 1;
    scanf("%d", &n);
    for(int i = 1; i <= n; ++ i){
        scanf("%d%d", &m[i], &a[i]);
        M *= m[i];
    }
    ll res = 0;
    for(int i = 1; i <= n; ++ i){
        ll Mi = M / m[i];
        ll ti, y;
        ll d = exgcd(Mi, m[i], ti, y);
        res += a[i] * ti * Mi;
    }
    printf("%lld\n", (res % M + M) % M);//可能为负数,所以需要处理一下
    return 0;
}
已标记关键词 清除标记
课程简介: 历经半个多月的时间,Debug亲自撸的 “企业员工角色权限管理平台” 终于完成了。正如字面意思,本课程讲解的是一个真正意义上的、企业级的项目实战,主要介绍了企业级应用系统中后端应用权限的管理,其中主要涵盖了六大核心业务模块、十几张数据库表。 其中的核心业务模块主要包括用户模块、部门模块、岗位模块、角色模块、菜单模块和系统日志模块;与此同时,Debug还亲自撸了额外的附属模块,包括字典管理模块、商品分类模块以及考勤管理模块等等,主要是为了更好地巩固相应的技术栈以及企业应用系统业务模块的开发流程! 核心技术栈列表: 值得介绍的是,本课程在技术栈层面涵盖了前端和后端的大部分常用技术,包括Spring Boot、Spring MVC、Mybatis、Mybatis-Plus、Shiro(身份认证与资源授权跟会话等等)、Spring AOP、防止XSS攻击、防止SQL注入攻击、过滤器Filter、验证码Kaptcha、热部署插件Devtools、POI、Vue、LayUI、ElementUI、JQuery、HTML、Bootstrap、Freemarker、一键打包部署运行工具Wagon等等,如下图所示: 课程内容与收益: 总的来说,本课程是一门具有很强实践性质的“项目实战”课程,即“企业应用员工角色权限管理平台”,主要介绍了当前企业级应用系统中员工、部门、岗位、角色、权限、菜单以及其他实体模块的管理;其中,还重点讲解了如何基于Shiro的资源授权实现员工-角色-操作权限、员工-角色-数据权限的管理;在课程的最后,还介绍了如何实现一键打包上传部署运行项目等等。如下图所示为本权限管理平台的数据库设计图: 以下为项目整体的运行效果截图: 值得一提的是,在本课程中,Debug也向各位小伙伴介绍了如何在企业级应用系统业务模块的开发中,前端到后端再到数据库,最后再到服务器的上线部署运行等流程,如下图所示:
©️2020 CSDN 皮肤主题: 撸撸猫 设计师:设计师小姐姐 返回首页