上海大型网站建设公司排名wordpress建cms
web/
2025/10/1 1:05:03/
文章来源:
上海大型网站建设公司排名,wordpress建cms,保洁公司做网站有什么作用,秦皇岛市建设局官网模运算
模运算是大数运算中的常用操作。如果一个数太大#xff0c;无法直接输出#xff0c;或者不需要直接输出#xff0c;则可以对它取模#xff0c;缩小数值再输出。取模可以防止溢出#xff0c;这是常见的操作。
模是英文mod的音译#xff0c;取模实际上是求余。
取…模运算
模运算是大数运算中的常用操作。如果一个数太大无法直接输出或者不需要直接输出则可以对它取模缩小数值再输出。取模可以防止溢出这是常见的操作。
模是英文mod的音译取模实际上是求余。
取模运算一般要求a和m的符号一致即都为正数或都为负数。如果正负不同那么请小心处理。
取模操作的加、减、乘满足分配律注意此时仍要求ab、a−b、a×b为正数如果有负数请小心处理。 例题1.刷题统计
2022年第十三届省赛lanqiaoOJ题号2098 这题用暴力法很好解但是只能拿到60的测试数据差不多对一半吧。
暴力法代码
#include iostream
using namespace std;
int main()
{// 请在此输入您的代码long long a,b,n; //要用long long cin a b n;long long sum 0,day 0; //定义做题数和天数while(sum n){day;if(day % 7 6 || day % 7 0) sumb;//周六周日else suma;//周一到周五}cout day;return 0; //暴力法通过60后面运行超时这个是意料之中的。
} 放在取模题中这也是一道取模的简单题利用取模操作把计算复杂度降为O(1)。
代码
#includebits/stdc.h
using namespace std;
int main()
{long long a,b,n;cin a b n;long long sum5*a2*b;//一周总数long long day7*(n/sum);//总数除以一周总数乘以一周7天nn%sum;//剩余题目long long d[]{a,a,a,a,a,b,b},i;//设立周数组for(i0;n0;i) {//当n0时就已经满足大于等于n这个时候的天数就是答案n-d[i];day;}cout day; return 0;
} 快速幂 int fastPow(int a, int n) { //快速幂 int ans 1; //用ans返回结果初始化为1不能初始化为0while(n) { //把n看成二进制数逐个处理它的最后一位if(n 1) ans * a; //如果n的最后一位是1则表示这个地方需要参与计算a * a; //递推a2 -- a4 -- a8-- a16--…n 1; //n右移一位把刚处理过的n的最后一位去掉}return ans; //结果
} 例题1.快速幂 套模板即可代码
#includebits/stdc.h
using namespace std;
typedef long long ll; //变量改用较大的long long型
ll fastPow(ll a, ll n, ll mod) {ll ans 1;a % mod; //非常重要防止下面的ans*a越界while(n) {if(n 1) ans (ans*a) % mod; //取模a a*a % mod; //取模n 1;}return ans; //输出结果
}
int main() {ll b,p,k;cinbpk;cout fastPow(b,p,k);return 0;
}
矩阵乘法 矩阵的加减法很简单把两个矩阵对应位置的元素进行加减即可得到结果。
矩阵乘法 for(int i1; im; i) //注i、j、k的先后顺序不重要因为对于c[][]来说都一样for(int j1; ju; j)for(int k1; kn; k)c[i][j] a[i][k] * b[k][j]);
根据矩阵乘法的定义可以推出下面两个式子。 例题1.矩阵相乘 代码
#includebits/stdc.h
using namespace std;
const int N100;
int n,m,k;
int A[N][N],B[N][N],C[N][N];
int multi(int u, int v) {int sum 0;for (int j0; jm; j) sum (A[u][j] * B[j][v]);return sum;
}
int main() {cin n m k;for(int i0; in; i)for(int j0; jm; j) cin A[i][j];for(int i0; im; i)for(int j0; jk; j) cin B[i][j];for(int i0; in; i)for(int j0; jk; j) C[i][j] multi(i, j);for(int i0; in; i) {for(int j0; jk; j) cout C[i][j] ;cout endl;}return 0;
}
GCD和LCM
最大公约数(Greatest Common DivisorGCD)和最小公倍数(the Least Common MultipleLCM)。
编程时可以不用自己写GCD代码而是直接使用库函数。
C的库函数__gcd()。 __gcd(); //shift -输出_ 注意是两个下划线所以要操作两次shift- 库函数__gcd()可能会返回负数见下面的例子。
#includebits/stdc.h
using namespace std;
int main() {cout__gcd(15, 81) endl; //输出 3cout__gcd(0, 44) endl; //输出 44cout__gcd(0, 0) endl; //输出 0cout__gcd(-6, -15) endl; //输出 -3cout__gcd(-17,289) endl; //输出 -17cout__gcd(17,-289) endl; //输出 17return 0;
} LCM
gcd(a, b)×lcm(a, b) a×b即lcm(a, b) a×b/gcd(a, b) a/gcd(a, b) ×b。 例题1.等差数列 解析 代码
#includebits/stdc.h
using namespace std;
int a[100000];
int main() {int n;cinn;for(int i0; in; i) cina[i];sort(a,an);int d0;for(int i1; in; i) d __gcd(d,a[i]-a[i-1]); //以{257}为例if(d0) coutnendl; //公差为0直接输出n就行else printf(%d\n,(a[n - 1] - a[0]) / d 1); return 0;
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/84752.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!