Euclidean gcd algorithm
2017-08-14 16:29
344 查看
gcd是Greatest Common Divisor的缩写,欧几里得最大公约数运算,GCD(A,B)得到A和B最大的公约数,关于该公式的证明可以参数:
https://www.khanacademy.org/computing/computer-science/cryptography/modarithmetic/a/the-euclidean-algorithm
这里主要说明该定理在编程中的应用。
情形一:画布一般是内存表面,画完之后一次性blit到framebuffer上显示出来,但是显示分辨率如果可设置,用户改变分辨率,这画布和framebuffer大小可能就不匹配了,这时将画布上一小块区域同步到framebuffer,坐标对焦是个问题,这时就可能会用到gcd:
static U32 start_coord(U32 * p_a_val, U32 a_max, U32 b_max)
{
U32 b_val = 0;
U32 gcd = 1;
U32 a_val = 0;
if(p_a_val==NULL) return 0;
if((a_max==0) || (b_max == 0))
{
* p_a_val = 0;
return 0;
}
gcd = get_euclid_gcd(a_max, b_max);
if(gcd==0) gcd = 1;
a_max /=gcd;
b_max /=gcd;
a_val = * p_a_val;
b_val =a_val /a_max +1;
* p_a_val =b_val *a_max;
b_val = b_val * b_max ;
return b_val;
}
U32 get_euclid_gcd(U32 max, U32 min)
{
U32 r,temp;
if((min == 0) || (max==0))
{
return 1;
}
if(max<min)
{
temp=max;
max=min;
min=temp;
}
while(min!=0)
{
r=max%min;
max=min;
min=r;
}
if(max == 0) return 1;
return max;
}
https://www.khanacademy.org/computing/computer-science/cryptography/modarithmetic/a/the-euclidean-algorithm
这里主要说明该定理在编程中的应用。
情形一:画布一般是内存表面,画完之后一次性blit到framebuffer上显示出来,但是显示分辨率如果可设置,用户改变分辨率,这画布和framebuffer大小可能就不匹配了,这时将画布上一小块区域同步到framebuffer,坐标对焦是个问题,这时就可能会用到gcd:
static U32 start_coord(U32 * p_a_val, U32 a_max, U32 b_max)
{
U32 b_val = 0;
U32 gcd = 1;
U32 a_val = 0;
if(p_a_val==NULL) return 0;
if((a_max==0) || (b_max == 0))
{
* p_a_val = 0;
return 0;
}
gcd = get_euclid_gcd(a_max, b_max);
if(gcd==0) gcd = 1;
a_max /=gcd;
b_max /=gcd;
a_val = * p_a_val;
b_val =a_val /a_max +1;
* p_a_val =b_val *a_max;
b_val = b_val * b_max ;
return b_val;
}
U32 get_euclid_gcd(U32 max, U32 min)
{
U32 r,temp;
if((min == 0) || (max==0))
{
return 1;
}
if(max<min)
{
temp=max;
max=min;
min=temp;
}
while(min!=0)
{
r=max%min;
max=min;
min=r;
}
if(max == 0) return 1;
return max;
}
相关文章推荐
- Leetcode: Water and Jug Problem && Summary: GCD求法(辗转相除法 or Euclidean algorithm)
- Algorithm,Number Theory,GCD
- 欧几里德与扩展欧几里德算法 Extended Euclidean algorithm
- extended euclidean algorithm 双六问题 2018-2-10
- 基础数论学习笔记-----------拓展欧几里得算法【Extended Euclidean Algorithm】
- Euclid's GCD Algorithm——MIT Open Courseware(Computability)
- 扩展欧几里得算法---Extended Euclidean algorithm
- Binary GCD algorithm
- Extended Euclidean algorithm
- ios之GCD
- 6 Easy Steps to Learn Naive Bayes Algorithm (with code in Python)
- GCD的使用小结
- iOS多线程编程之Grand Central Dispatch(GCD)介绍和使用
- iOS GCD集汇(一)GCD(Grand Central Dispatch)和Block 使用-浅析
- 简单的Boyer Moore Algorithm
- iOS 如何使用GCD
- GCD同步问题
- 使用GCD进行倒计时操作
- Algorithm books
- 随波逐流之GCD