寒假培训——快速幂取模

每个题目都有超链接,点击可以跳转到题目界面!!!

快速幂取模

1.号的优先级要比%的优先级高,所以(ab)%m与ab%m相同。
2.(a
aaa)%m=(a^2 a^2)%m=(a ^2%m a^2%m)%m=(a%ma%ma%ma%m)%m;
3.只要是快速幂取模,就简单地将每一项和总和后面加%mod即可。
4.a%m%m=a%m;
5.(a+b)%m=(a%m+b%m)%m
6.(a
b)%m=(a%m*b%m)%m

在这里插入图片描述
在这里插入图片描述

库特的数学题

多写几项就会发现a[n]=2*pow(3,n),再代入快速幂取模的模板即可。
在这里插入图片描述
如果就是单纯按照题目的关系式来做就会超时
在这里插入图片描述

异或方程解的个数

先移项:a=x+(a^x),然后看二进制数的某一位,讨论即可发现规律:
a x+(a^x)
1 0+(1^0)=1
1 1+(1^1)=1
0 0+(0^0)=0
0 1+(0^1)=10
可以发现,第四种情况(a=0,x=1)会改变产生进位,改变了a的值,所以排除第四种情况。
综合第三,四种情况,可以发现,如果a的某一位为0的话,那么x对应位只能为0。
再来看第一,第二种情况,我们发现,当a的某一位为1时,x的对应位可以为1,可以为0。
所以,我们只需求出a的二进制数中,有多少个1即可,答案即为2^n

注:
1.二进制的加法是满2进1,如100110+110010=1011000;

2.一个数每除以一次2,其二进制的最后一位就会消掉;
3.a=a<<1相当于将a乘以2,左移的速度要比乘法快。

本题不用快速幂取模
在这里插入图片描述
注:
pow(a,b)函数中的a和b可以是long long类型的数,但是其返回的是int类型的,所以用%lld输出会是随机值,所以应该对pow(a,b)进行强制类型转换,再输出。
printf("%lld\n",(long long int)pow(2,num1));

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值