同余与模算术

一、大整数取模

求n mod m 的值,(n ≤10100,m ≤109)

思路:首先,将大整数根据秦九韶公式写成“自左向右”的形式:4351 = ((4 * 10 + 3) * 10 + 5) * 10 + 1,然后利用模的性质,逐步取模。

 1 const int maxn = 100 + 10;
 2 char n[maxn];
 3 int m;
 4
 5 int biginteger_mod(char* n, int m)
 6 {
 7     int len = strlen(n);
 8     int ans = 0;
 9     for(int i = 0;i < len;i++)
10         ans = (int)(((long long)ans * 10 + n[i] - ‘0‘) % m);
11     return ans;
12 }

二、幂取模

直接暴力写是O(n),较快的方法是分治法,时间复杂度是O(logn)

求an mod m 的值, (a,n,m ≤109)

1 int pow_mod(int a, int n, int m)
2 {
3     if (n == 0)  return 1;
4     int x = pow_mod(a, n / 2, m);
5     long long ans = (long long)x * x % m;
6     if (n % 2)  ans = ans * a % m;
7     return (int)ans;
8 }

原文地址:https://www.cnblogs.com/lfri/p/9614074.html

时间: 2024-11-05 18:57:01

同余与模算术的相关文章

数论初步——同余与模算术

具体内容见紫书p314-p316 一.a mod b a mod b:a除以b的余数,C语言表达式是a % b,且b!=0 二.模线性方程组 题目:输入正整数a,b,n,解方程ax ≡ b(mod n) .a,b,n<=109. 新记号:同余 "≡" a ≡ b(mod n):a和b关于模n同余,即a%n = b%n a ≡ b(mod n)的充要条件:a-b是n的整数倍 特殊情况,当b=1时,ax ≡ 1(mod n) 的解称为a关于模n的逆,它类似于实数运算中"倒数

同余 模算术 中国剩余定理

相关知识点: 1.a≡b(modc),a,b关于模c同余  ,即a modc=b mod c , 等价于a%c=b 2.如果a,b互质(a,b)=1,则可得a关于模b的逆 ax≡1(modb) 3.关于余数的定理: 定理1 :如果被除数加上(或减去)除数的整数倍,除数不变,则余数不变. 定理2 :如果被除数扩大(或缩小)几倍,除数不变,则余数也扩大(或缩小)同样的倍数. 定理3: 如果整数a除以自然数b(b≠0),余数r仍不小于b,则r除以b的余数等于a除以b所得余数.(余数和被除数关于除数同余

模算术 modular arithmetic

https://en.wikipedia.org/wiki/Modular_arithmetic#Integers_modulo_n 模算术: 整数达到特定值时会' 折返 ' 回来-- 模数 modulus(moduli) 例如: 时钟 modulo 12. 且根据定义, 12 不仅和12一致,还和0一致. 模 n 就是除数为 n 的意思. 1. 定义同余关系 如果  a-b=kn   那么说 a,b 是模n同余的.n为正整数,k为整数. a≡b (mod n) n为同余的模数. 同余关系写为:

同余与模运算

发现自己还是看书少了,能从书上学到不少东西. 加减乘的模运算: #include<cstdio> using namespace std; int mul_mod(int a,int b,int n){ a %= n; b %= b; return (int)((long long)a * b % n); }///如果n本身超int,就要用高精度了 int add_mod(int a,int b,int n){ a %= n; b %= b; return (int)((a + b) % n)

位运算、取余取模

l  取余和取模的共同点和区别 对于整数: 相同:无论取余还是取模都分两步:1)求整数商:c=a/b  2)计算模或余数:r=a-c*b 不同:取模在计算c值时,向0方向舍入(fix()函数) 取余计算c时,向负无穷方向舍入(floor()函数) 7 mod 4 = 3(商 = 1 或 2,1<2,取商=1) -7 mod 4 = 1(商 = -1 或 -2,-2<-1,取商=-2) 总结:当a.b符号一致时,结果一致:当a.b符号不同时,取余结果符号与a一致,取模结果符号与b一致 基本性质:

《算法竞赛入门经典(第二版)》pdf

下载地址:网盘下载 内容简介  · · · · · · <算法竞赛入门经典(第2版)>是一本算法竞赛的入门与提高教材,把C/C++语言.算法和解题有机地结合在一起,淡化理论,注重学习方法和实践技巧.全书内容分为12 章,包括程序设计入门.循环结构程序设计.数组和字符串.函数和递归.C++与STL入门.数据结构基础.暴力求解法.高效算法设计.动态规划初步.数学概念与方法.图论模型与算法.高级专题等内容,覆盖了算法竞赛入门和提高所需的主要知识点,并含有大量例题和习题.书中的代码规范.简洁.易懂,不

2834 斐波那契数

2834 斐波那契数 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 小X是个聪明的孩子,他记得斐波那契数列f(n)中前1000个数.不过由于学业的压力,他无法记得每一个数在数列中的位置. 他现在知道斐波那契数列中的一个数f(x)模P后的值N(即f(x) mod P=N)以及x可能的最大值M,如果再对于斐波那契数列中每一个数都模P,他想知道这个数可能出现在第几个.不过小X还要做作业呢,这个问题就交给你由编程来

10.1数论初步

1.欧几里得算法(辗转相除法)和唯一分解定理: ①唯一性分解定理: 算术基本定理,又称为正整数的唯一分解定理,即:每个大于1的自然数均可写为质数的积,而且这些素因子按大小排列之后,写法仅有一种方式. 算术基本定理的内容由两部分构成: 分解的存在性: 分解的唯一性,即若不考虑排列的顺序,正整数分解为素数乘积的方式是唯一的. ②辗转相除法: 是求最大公约数的算法. 辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数求余数的最大公约数.在这个过程中,较大的数缩小了,所以继续进行同样的计

取模和求余的区别

通常情况下取模运算(mod)和求余(rem)运算被混为一谈,因为在大多数的编程语言里,都用'%'符号表示取模或者求余运算.在这里要提醒大家要十分注意当前环境下'%'运算符的具体意义,因为在有负数存在的情况下,两者的结果是不一样的. 对于整型数a,b来说,取模运算或者求余运算的方法都是: 1.求 整数商: c = a/b; 2.计算模或者余数: r = a - c*b. 求模运算和求余运算在第一步不同: 取模求余运算在取c的值时,向0 方向舍入(fix()函数): 而求余取模运算在计算c的值时,向