mod->取余

转自: https://blog.youkuaiyun.com/u014665013/article/details/50856691
转载出处: 学习笔记

同余式:正整数a,b对p取模,它们的余数相同,(a % p)=(b % p) 记做 或者a ≡ b (mod p)。

运算规则
模运算与基本四则运算有些相似,但是除法例外。其规则如下:
             (a + b) % p = (a % p + b % p) % p (1)
             (a - b) % p = (a % p - b % p) % p (2)
             (a * b) % p = (a % p * b % p) % p (3)
             a ^ b % p = ((a % p)^b) % p (4)

详见here
结合律:
             ((a+b) % p + c) % p = (a + (b+c) % p) % p (5)
             ((a*b) % p * c)% p = (a * (b*c) % p) % p (6)
交换律:
             (a + b) % p = (b+a) % p (7)
             (a * b) % p = (b * a) % p (8)
分配律:
             (a+b) % p = ( a % p + b % p ) % p (9)
             ((a +b)% p * c) % p = ((a * c) % p + (b * c) % p) % p (10)
重要定理
             若a≡b (% p),则对于任意的c,都有(a + c) ≡ (b + c) (%p);(11)
             若a≡b (% p),则对于任意的c,都有(a * c) ≡ (b * c) (%p);(12)
             若a≡b (% p),c≡d (% p),则 (a + c) ≡ (b + d) (%p),(a - c) ≡ (b - d) (%p),
             (a * c) ≡ (b * d) (%p),(a / c) ≡ (b / d) (%p); (13)

//顺序栈基本运算算法 #include <stdio.h> #include <malloc.h> #define MaxSize 100 typedef long long ElemType; typedef struct { ElemType data[MaxSize]; int top; //栈指针 } SqStack; //顺序栈类型 //创建顺序栈InitStack void InitStack(SqStack * &s){ s=(SqStack *)malloc(sizeof(SqStack)); s->top=-1; } //判断顺序栈是否为空StackEmpty bool StackEmpty(SqStack * s){ return s->top == -1; //return true; } //入栈Push //bool Push_1(SqStack * s){ // return s->top==-1; //} //void Push(SqStack * s) { // if(s->top==-1){ // printf("顺序栈为空\n"); // } // else{ // printf("顺序栈不为空\n"); // } //} //入栈Push bool Push(SqStack *s, ElemType e){ if (s->top == MaxSize - 1) { printf("顺序栈已满,无法入栈\n"); return false; } s->top++; s->data[s->top]=e ; printf("元素 %lld 完成入栈\n", e); return true; } //出栈Pop bool Pop(SqStack * s, ElemType &e){ if (s->top == - 1){ printf("顺序栈为空,无法出栈\n"); return false; } e=s->data[s->top]; s->top--; printf("元素 %lld 完成出栈\n",e); return true; } //按顺序输出整个顺序栈 void PrintStack(SqStack * s) { if (StackEmpty(s)) { printf("顺序栈为空\n"); return; } for (int i = 0; i <= s->top; i++) { printf("%lld ", s->data[i]); } printf("\n"); } //销毁顺序栈 void DestroyStack(SqStack * &s) { free(s); s = NULL; } //提高性项目:基于栈的特性,实现十进制转八进制的代码实现。 //步骤:①定义顺序栈 ②使用辗转相除法将该十进制数除以八,将数依次入栈 //③将栈中元素依次出栈 ④销毁顺序栈 void DecToOct(int num) { int originalNum = num; SqStack *s = NULL; InitStack(s); while (num > 0) { Push(s, num % 8); num /= 8; } printf("十进制 %lld 转换为八进制是: ", originalNum); ElemType e; while (Pop(s, e)) { printf("%lld", e); } printf("\n"); DestroyStack(s); } int main(){ //顺序栈的初始化InitStack SqStack *s=NULL; InitStack(s); printf("顺序表地址为%p\n",s); //判断顺序栈是否为空StackEmpty bool as; as=StackEmpty(s); if(as==true){ printf("as的值为true\n"); } ElemType e=10; //入栈Push Push(s,e); //出栈Pop Pop(s,e); printf("栈顶元素为%lld\n",s->data[s->top]); //按顺序输出整个顺序栈 PrintStack(s); //销毁顺序栈 DestroyStack(s); //提高性项目:基于栈的特性,实现十进制转八进制的代码实现。 DecToOct(2025269509); return 0; } 实验总结以及新的体会
10-27
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值