最大公约数&&快速幂模板
来源:互联网 发布:易云数据vps 编辑:程序博客网 时间:2024/06/07 04:46
快速幂算法:
求a的b次方模c,如果b是偶数,就相当于求 a的平方 的二分之b次方 模c;
如果b是奇数,就在上面的基础上再乘以a 模c;即a的平方的二分之b 次方 乘以a 模c;
由此可以得到算法4:
算法4:
int ans = 1;
a = a % c;
if(b%2==1)
ans = (ans * a) mod c; //如果是奇数,要多求一步,可以提前算到ans中
k = (a*a) % c;
for(int i = 1;i<=b/2;i++)
ans = (ans * k) % c;
ans = ans % c;
对于奇数的情形会多出一项a mod c,所以当b是奇数时,我们通过ans = (ans * a) % c;来弥补多出来的这一项
最终的模板:
int ans = 1;
a = a % c;
while(b>0)
{
if(b % 2 == 1)
ans = (ans * a) % c;
b = b/2;
a = (a * a) % c;
}
最大公约数(1)
int gcd(int a, int b)
{
return a%b == 0?b:gcd(b,a%b);
}
最大公约数(2)
intmax(int x,int y)
{
inttemp;
if(x<y)
{
temp=x;x=y;y=temp;
}
while(y!=0)
{
temp=x%y;
x=y;
y=temp;
}
return(x);
}
最大公约数(3)
int A(int a,int b)
{
return b==0?a:A(b,a%b);
}
最小公倍数
intmin(int x,int y)
{
intmax(int x,int y);
inttemp;
temp=max(x,y);
return(x*y/temp);
}
快速幂
int PowerMod(int a,int b,int c)
{
int ans = 1;
a = a % c;
while(b>0) {
if(b % 2 = = 1)
ans = (ans * a) % c;
b = b/2;
a = (a * a) % c;
}
return ans;
}
最小公倍数:
int f(int a, int b)
{
int i;
for(i=a; ;i=i+a)
{
if(i%b==0)
return i;
}
}
- 最大公约数&&快速幂模板
- 最大公约数模板
- 快速幂总结,最大公约数(递归版本)
- 快速幂模板
- 矩阵快速幂模板
- 快速幂 ---模板
- 快速幂模板
- 快速幂模板
- 矩阵快速幂--模板
- 矩阵快速幂 模板
- 矩阵快速幂模板
- 矩阵快速幂模板
- 快速幂模板
- 快速幂小模板
- 【矩阵快速幂模板】
- 矩阵快速幂模板
- 快速幂模板
- 快速幂算法模板
- c# dapper oracle like 参数话
- 数据统计相关(ORACLE)
- 时间选择插件 datePicker 精确到分
- 一起学爬虫 Node.js 爬虫篇(三)使用 PhantomJS 爬取动态页面
- hellocharts之linechart最详细介绍(写了好久)
- 最大公约数&&快速幂模板
- 时事与网络流行
- kdevelop launch configuration
- jquery Mobile—js不加载
- js鼠标滚轮事件(mousewheel/DOMMouseScroll)
- Java笔记整理(2)
- 转发和重定向的区别
- JVM知识点总结
- 不可滑动的ViewPager