Acm2-快速幂、位运算、递归
来源:互联网 发布:企业网络信息平台构建 编辑:程序博客网 时间:2024/06/03 13:42
重点:快速幂、位运算、递归
详解:
快速幂:
目的:快速解决很大的数关于某一个数的取模,从而减少时空的复杂度;
方法:分层次的累乘,每次乘以多余的数;
步骤:
1).确定幂的奇偶性:b%2==1或b&1==1均可;
2).将整除数依次累乘:a=(a*a)%c;
3).将次幂数减半:b/=2;
4).判断次幂数是否为0,为0跳出循环,不为0继续返回指行循环体;
样例:这里我们采用调用函数的形式:
Int Pow1(int ,int ,int );
5的10的18次关于1007取模
int pow1(int a,int b,int c)
{
int ans;
a=a%c;
while(b>0)
{
if(b%2==1)
{
ans=(ans*a)%c;
}
b/=2;
a=(a*a)%c;
}
return ans ;
}
递归:
目的:解决重复的计算问题;通过所传的参数不同,达到预期的效果;
样例:
1).阶乘
#include<stdio.h>
int fact(int n);
Int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
printf("%d\n",fact(n));
}
return 0;
}
int fact (int n)
{
int f;
if(n==1)
return 1;
else{
f=(fact(n-1)+1)*2;
return f;
}
}
2).杨辉三角
#include<stdio.h>
int a[40][40];
int f(int x,int y)
{
if(y==1||y==x)
return 1;
if(a[x][y])
return a[x][y];
return a[x][y]=f(x-1,y-1)+f(x-1,y);
}
int main()
{
int n,i,j;
while(scanf("%d",&n)!=EOF)
{
for(i=1;i<=n;i++)
{
for(j=1;j<i;j++)
printf("%d ",f(i,j));
printf("%d\n",f(i,j));
}
printf("\n");
}
return 0;
}
- Acm2-快速幂、位运算、递归
- 位运算之快速幂
- 关于位运算-快速幂
- 快速求幂(位运算)
- ACM2
- ACM2 递归 n分成k份
- [备战NOI同步赛]快速幂模板(二分/位运算)
- Rightmost Digit(快速幂+数学知识OR位运算)
- POJ 3295 - 位运算 + 模拟 +递归
- POJ 1845 Sumdiv【同余模运算+递归求等比数列和+快速幂运算】
- java基础--数组Arrays、递归、移位运算、位运算符
- 位运算的某些快速计算方法
- 递归求快速幂
- HDU 2276 Kiki & Little Kiki 2 (位运算+矩阵快速幂)
- Nice Patterns Strike Back(位运算dp+大数矩阵快速幂)
- Codeforces Round #307 (Div. 2)(二分||位运算+矩阵快速幂||分块)
- HDOJ Kiki & Little Kiki 2 2276【位运算+矩阵快速幂】
- HDU 2276-Kiki & Little Kiki 2(矩阵快速幂+位运算)
- Windows下使用Vs2017编译id3lib库
- ubuntu 16.04 工具安装
- BZOJ2115 线性基 对于异或环的处理
- C语言中取地址符&做函数形参?—— 引用的讨论
- Circuit上的电路构建
- Acm2-快速幂、位运算、递归
- iOS 数组与指针经典笔试题
- 栈链的实现
- UDP之socket编程实例
- 什么是前端工程师?前端工程师需要掌握什么技能?
- 不调用库函数,模拟实现strcpy函数
- 数据库访问JavaBean
- 浅析数据库(DB)、操作数据存储(ODS)和数据仓库(DW)的区别与联系
- 4.3