算法学习笔记(1)取模运算(取余)
转自大整数取模--思路及实现 - I'm coding - 博客园 (cnblogs.com)
1.取模的常用公式:
一 . (a+b)mod n = ((a mod n)+(b mod n) mod n
二 . (a-b)mod n = ((a mod n)-(b mod n)+n) mod n
三 . ab mod n = (a mod n)(b mod n) mod n
比如,求两个整数的乘积的模,因为乘积可能超过INT_MAX, 故应该用long long存储中间值。
int mul_mod(int a, int b, int n) { a %= n; b %= n; return (int) ((long long)a*b % n); }
2.应用:大整数取模
思路:首先,将大整数分解成这种形式:1234 = ((1*10+2)*10+3)*10+4,这个地方原来是模拟除法的过程,例如
#include <cstdio> #include <cstring> char a[10000 + 10]; int main() { int b, len; while(~scanf("%s%d", a, &b)){ len = strlen(a); int ans = 0; for(int i = 0; i < len; i++) ans = (int)(((long long) ans*10 + a[i] - '0') % b); //就在这一步模拟除法 printf("%d\n", ans); } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具