快速幂+叉乘计算--最基础的算法,最详细的注释
2017-09-02 01:52
387 查看
敲代码也敲了不少时间了,整理一下知识,日后用起来也方便是不。
不赘语了,从头来最简单的先上。
快速幂
原理很容易理解,就是利用了二进制表达的特点。指数的二进制串上若为1则代表结果的因子中含有2的当前位阶数的基数。
由于二进制的特性,这个值是上一位值的两倍,可由递推得到。
为什么说快速幂快呢,emmmm 还是举个栗子吧。
3^65535(2d的16次方-1) 如果直接用pow()他会给你循环65535次
而快速幂只要16次 对比一下的确有点快
代码
叉乘计算
嗯。。两个空间叉乘的结果在数值上等于临边为这两个向量的平行四边形的面积。
于是就,可以愉快的计算多边形的面积了。
直接代码
不赘语了,从头来最简单的先上。
快速幂
原理很容易理解,就是利用了二进制表达的特点。指数的二进制串上若为1则代表结果的因子中含有2的当前位阶数的基数。
由于二进制的特性,这个值是上一位值的两倍,可由递推得到。
为什么说快速幂快呢,emmmm 还是举个栗子吧。
3^65535(2d的16次方-1) 如果直接用pow()他会给你循环65535次
而快速幂只要16次 对比一下的确有点快
代码
int power(int x,int y){ //x基数 y指数 int i,t=1; while(y) //直到指数耗尽 { if(y&1) //判断指数二进制位状态 t*=x; //乘上当前位的基 x*=x; //基随着指数位倍增 y>>1;//处理指数的下一位 }
叉乘计算
嗯。。两个空间叉乘的结果在数值上等于临边为这两个向量的平行四边形的面积。
于是就,可以愉快的计算多边形的面积了。
直接代码
#include<stdio.h> #define N 200 int main(){ int n,x ,y ; //两个数组表示点集 while(scanf("%d",&n),n) //输入点的个数 { for(int i=0;i<n;i++) scanf("%d%d",&x[i],&y[i]); //顺序输入点的坐标 for(int i=0;i<n;i++) { int j=(i+1)%n; //取余为了首尾衔接 sum+=x[i]*y[j]-x[j]*y[i]; //套用叉乘公式 } sum=sum/2.0; //计算的结果是平行四边形,而多边形是由三角形组成的,故除2 sum<0?-1sum:sum; //取绝对值,凹形时为负值 printf("%.f",sum); } return 0; }
相关文章推荐
- 矩阵快速幂--最基础的算法,最详细的注释
- 字典树(链式+数组模拟)--最基础的算法,最详细的注释
- 算法的强大——快速计算一个正二进制整数中包含多少个1
- 基础算法--计算几何
- logistic回归算法详细分析与Python代码实现注释
- 基础算法——快速排序
- J2ME连连看基础功能源代码(含详细注释)
- 算法基础(二):栈的应用--迷宫解题(超详细版!)
- Python 实现神经网络逆向传播算法(含详细注释)
- FOCR:快速最优通道布线算法(详细)
- 并行计算复习————第三篇 并行计算理论基础:并行数值算法
- 算法的强大——快速计算一个正二进制整数中包含多少个1
- [转]快速计算平方根倒数的一个算法
- SAP CRM BOL编程基础,代码+详细注释
- 快速计算A^B的算法
- 【算法分析】QQ“一键退朝”之详细计算方法
- DSP 中的基础算法和模型的详细解析
- Strassen矩阵乘法 + 快速计算乘方的算法 + 矩阵的次幂
- 基础算法----快速排序
- 学习笔记之快速排序——quicklySort——基础算法——java