LCM与快速取模运算模板
一. LCM取最小公倍数模板。
公式:两数a,b的最小公倍数等于两数相乘除以两数的最大公倍数。
代码:
#include<bits/stdc++.h>
using namespace std;
int lcm(int a,int b)
{
int ans;
ans=a/__gcd(a,b)*b;
return ans;
}
int main()
{
int a,b,result;
scanf("%d %d",&a,&b);
result=lcm(a,b);
printf("%d",result);
return 0;
}
二.快速取模运算模板(非递归写法)
说明:快速取模运算时用来解决求对一个数的ncifang取模的问题,虽然可以先进行n次乘法再取模,但是当一个数的指数很大的时候先进行n此乘法的时候就很容易超时所以我们引出快速取模。
实质:快速取模实质是用位运算将一个的指数变成二进制来进行位运算的过程。
思想:将需要操作的数字的底数,指数和需要取模的模数,输入进函数,然后通过循环来判断指数是否为基数,如果是奇数则让结果乘以自己即次数加一,如果是偶数则让它自己乘以自己即次数加二。最后进行b=b/2,即b的二进制位向后移一位,直到b为0位置。
代码:
#include<bits/stdc++.h>
using namespace std;
long long quickmod(long long a,long long b,long long c)
{
long long result,i,j;
result=1;
while(b)
{
if(1&b)
result=result*a%c;
a=a*a%c;
b/=2;
}
return result;
}
int main()
{
long long a,b,c,result;
scanf("%lld %lld %lld",&a,&b,&c);
result=quickmod(a,b,c);
printf("%lld",result);
return 0;
}