定义

如果整数a,b除以正整数m的余数相同,那么a,b模m同余 。

知识点











拓展欧几里得算法

代码

#include <bits/stdc++.h>
using namespace std;
int exgcd(int a, int b, int &x, int &y)
{
if(b==0)
{
x = 1;
y = 0;
return a;
}
int d = exgcd(b, a%b, x, y);//代表答案
int z = x;
x = y;
y = z-(a/b)*y;
return d;
}
int main()
{
int a, b;
cin >> a >> b;
int x, y;
int ans = exgcd(a, b, x, y);
printf("%d %d %d", ans, x, y);
return 0;
}

AcWing97. 约数之和



一看:显然不能使用暴力。

一提到数论,应该下意识想起分解质因数。

#include <bits/stdc++.h>
using namespace std;
const int mod = 9901;
int p[50];
int c[50];
int cnt = 0;//指示总共有多少个素数
void devide(int n)
{
for(int i = 2; (long long)i*i <= n; i++)
{
if(n % i == 0)
{
p[++cnt] = i;
c[cnt] = 0;
while(n % i==0)
{
c[cnt]++;
n /= i;
}
}
}
if(n > 1)
{
p[++cnt] = n;
c[cnt] = 1;
}
}
int ksm(int a, int b, int pp)
{
int ans = 1 % pp;
int tmp = a % pp;
while(b)
{
if(b&1) ans = (long long)ans * tmp % pp;
tmp = (long long)tmp * tmp % pp;
b >>= 1;
}
return ans%pp;
}
int cal(int i)
{
int ans = 1;
int pri = p[i];
int num = c[i];
if((pri-1) % mod == 0)
{
return (num+1)% mod;
} int fenzi = (ksm(pri, num+1, mod)+mod-1)%mod;
if((pri-1) % mod != 0)
{
int niyuan = ksm(pri-1, mod-2, mod);
fenzi = (long long)fenzi * niyuan % mod;
}
return fenzi;
}
int main()
{
int ans = 1;
int A, B;
cin >> A >> B;
if(A == 0) //注意需要进行特殊判断
{
printf("0");
return 0;
}
devide(A);
for(int i = 1; i <= cnt; i++)
{
c[i] = B * c[i];
}
for(int i = 1; i <= cnt; i++)
{
int res = cal(i);
ans = (long long)res * ans % mod; }
cout << ans;
return 0;
}

AcWing203. 同余方程

AcWing204. 表达整数的奇怪方式

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
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)*y;
return d;
}
int main()
{
int n;
cin >> n;//由于每一个值都是从之前递推得来的,所以我特殊构造第一个值
ll ans = 0;
ll lcm = 0;
ll a, m;
scanf("%lld%lld", &m, &a);
ans = a;
lcm = m;
n--;
bool flag = true;
while(n--)
{
ll x, y;
scanf("%lld%lld", &m, &a);
ll d = exgcd(lcm, m, x, y);
a = (a - ans%m + m)%m;
if(a%d!=0)
{
flag = false;
break;
}//注意:x并不是同余方程的解(还要算一下比例)
ll k = x*(a/d)%m;
//ans += k*lcm;
//x = (x%m+m)%m;ll k = x*(a/d)%m;
ans += k*lcm;
//ans += x*lcm;
lcm = lcm/d*m;////必须在更新完成lcm之后才可以进行
ans = (ans%lcm+lcm)%lcm;
}
if(flag)
{
printf("%lld", ans);
}
else
{
printf("-1");
}
return 0;
}

算法竞赛进阶指南0x33同余的更多相关文章

  1. 《算法竞赛进阶指南》0x10 基本数据结构 Hash

    Hash的基本知识 字符串hash算法将字符串看成p进制数字,再将结果mod q例如:abcabcdefg 将字母转换位数字(1231234567)=(1*p9+2*p8+3*p7+1*p6+2*p5 ...

  2. 《算法竞赛进阶指南》1.4Hash

    137. 雪花雪花雪花 有N片雪花,每片雪花由六个角组成,每个角都有长度. 第i片雪花六个角的长度从某个角开始顺时针依次记为ai,1,ai,2,-,ai,6. 因为雪花的形状是封闭的环形,所以从任何一 ...

  3. bzoj 1787 && bzoj 1832: [Ahoi2008]Meet 紧急集合(倍增LCA)算法竞赛进阶指南

    题目描述 原题连接 Y岛风景美丽宜人,气候温和,物产丰富. Y岛上有N个城市(编号\(1,2,-,N\)),有\(N-1\)条城市间的道路连接着它们. 每一条道路都连接某两个城市. 幸运的是,小可可通 ...

  4. POJ1639 算法竞赛进阶指南 野餐规划

    题目描述 原题链接 一群小丑演员,以其出色的柔术表演,可以无限量的钻进同一辆汽车中,而闻名世界. 现在他们想要去公园玩耍,但是他们的经费非常紧缺. 他们将乘车前往公园,为了减少花费,他们决定选择一种合 ...

  5. 算法竞赛进阶指南 0x00 基本算法

    放在原来这个地方不太方便,影响阅读体验.为了读者能更好的刷题,另起一篇随笔. 0x00 基本算法 0x01 位运算 [题目][64位整数乘法] 知识点:快速幂思想的灵活运用 [题目][最短Hamilt ...

  6. 算法竞赛进阶指南--快速幂,求a^b mod p

    // 快速幂,求a^b mod p int power(int a, int b, int p) { int ans = 1; for (; b; b >>= 1) { if (b &am ...

  7. 算法竞赛进阶指南0x14 Hash

    组成部分: 哈希函数: 链表 AcWing137. 雪花雪花雪花 因为所需要数据量过于大,所以只能以O(n)的复杂度. 所以不可能在实现的过程中一一顺时针逆时针进行比较,所以采用一种合适的数据结构. ...

  8. 《算法竞赛进阶指南》1.6Trie

    142. 前缀统计 给定N个字符串S1,S2-SN,接下来进行M次询问,每次询问给定一个字符串T,求S1-SN中有多少个字符串是T的前缀. 输入字符串的总长度不超过106,仅包含小写字母. 输入格式 ...

  9. 《算法竞赛进阶指南》 1 (P4) a^b 快速幂

    快速幂 #include<cstdio> #include<cmath> #include<iostream> using namespace std; long ...

随机推荐

  1. Hadoop安装学习(第四天)

    学习任务:解决9000端口丢失导致hadoop无法连接的问题 解决方法:格式化namenode 步骤: 1.进入hadoop/bin 2.输入命令:hadoop namenode -format(hd ...

  2. ATM+购物车项目流程

    目录 需求分析 架构设计 功能实现 搭建文件目录 conf配置文件夹 lib公共功能文件夹 db数据文件夹 interface业务逻辑层文件夹 core表现层文件夹 测试 最外层功能(src.py) ...

  3. mac安装git、node

    1.需要先安装homebrew(之前的文章里有) 2.安装git brew install git 3.安装node brew install node 3.1.安装成功后,查看版本号 node -v ...

  4. Unity-UGUI-无限循环列表

    前言:项目准备新增一个竞技场排行榜,策划规定只显示0-400名的玩家.我一想,生成四百个游戏物体,怕不是得把手机给卡死?回想原来在GitHub上看到过一个实现思路就是无限循环列表,所以就想自己试试.公 ...

  5. [USACO2021DEC] HILO 踩标做法

    [USACO2021DEC] HILO Solution 参考自 官方题解 里提到的一篇 Obliteration.pdf,但是里面作者写出了极多错误...然后式子还错错得对了. 令 \(y=n-x\ ...

  6. 高度灵活可定制的PC布局:头部按钮、左边栏、右边栏、状态栏

    什么是自适应布局 CabloyJS提供了一套布局管理器,实现自适应布局 关于自适应布局的概念,强烈建议先阅读以下两篇文章: 自适应布局:pc = mobile + pad 自适应布局:视图尺寸 什么是 ...

  7. Amazon 消息订阅对接

    亚马逊的api 谁用谁知道...... 除了坑还是坑 头疼一周整出来,分享给铁汁们 amazon 的订阅思维,我只能说外国人脑回路有点长 下面就讲讲具体流程步骤: 第一步: 参照官方教程:设置通知(A ...

  8. flink-执行模式

    flink的执行模式 flink既能处理离线数据,也能处理实时数据,在1.12.0版本以前,批数据返回的数据集合是dataSet,对应一套dataSet的api,从1.12.0版本以后,flink实现 ...

  9. 【Redis】集群故障转移

    集群故障转移 节点下线 在集群定时任务clusterCron中,会遍历集群中的节点,对每个节点进行检查,判断节点是否下线.与节点下线相关的状态有两个,分别为CLUSTER_NODE_PFAIL和CLU ...

  10. vue大型电商项目尚品汇(后台终结篇)day06 重磅!!!

    自此整个项目前后台,全部搭建完毕. 今天是最后一天,内容很多,而且也比较常用,一个图标类数据可视化,一个后台的权限管理,都是很经典的类型. 一.数据可视化 1.简介 专门的一门学科,有专门研究这个的岗 ...