一、题目描述

在一个由1×1的格子组成的平面上,给出两个格子的交点P1(x1,y1)和P2(x2,y2).要求计算出线段P1P2上还有多少格子交点。

二、样例

输入:P1=(1,11),P2=(5,3)

输出:3{(2,9),(3,7),(4,5)}

三、解题思路

先将线段当作向量P1P2将P1移到坐标原点,向量为P1P2={(x2-x1),(y2-y1)},令a=y2-y1,b=x2-x1,c为a和b的最大公约数即c=gcd(a,b),则P1P2={b,a},其斜率为:K=a/b=(a/c)/(b/c),若令a1=a/c,b1=b/c,则a1与b1互质且K=a1/b1.令Qt={t×b1,t×a1} t={1,2,3,4......,c},则Qt是在向量P1P2上的且其也是交点,当t=c时Qt就是P2,所以交点数为c-1即gcd(a,b).

四、辗转相除法

辗转相除法是用来求两个数的最大公约数.

其主要思想: 假设a>b,令a=b×p+q,假设c为a,b的最大公约数即c=gcd(a,b).则有a和b都能整除c.而a=b×p+q,立即推出q也能整除c,故q与b的公约数,但是不是最大公约数呢。这里我们用反证法,假设q与b的最大公约数为c1且c1>c,即gcd(b,q)=c1>c,所以b和q都能整除c1,立即推出a也一定能整除c1,故a与b最大公约数应该大于等于c1,即gcd(a,b)=c>=c1,与c1>c矛盾。故c1=c,

所以得出结论:gcd(a,b)=gcd(b,a%b)且当b=0时有gcd(a,b)=a.


五、最大公约数代码

#include <iostream>
#include <stdio.h>
using namespace std;int gcd(int a,int b)//求a,b最大公约数
{if(b==0)return a;return gcd(b,a%b);
}int main()
{int a,b,c;scanf("%d,%d",&a,&b);if(a<=b)//大的放前c=gcd(a,b);elsec=gcd(b,a);printf("%d\n",c);return 0;
}

六、该题的代码

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;int gcd(int a,int b)//求a,b最大公约数
{if(b==0)return a;return gcd(b,a%b);
}int main()
{int a,b,c;int x1,x2,y1,y2;scanf("%d%d",&x1,&y1);//输入的一个点scanf("%d%d",&x2,&y2);//输入的二个点a=abs(x2-x1);b=abs(y2-y1);if(a<=b)//大的放前c=gcd(a,b);elsec=gcd(b,a);printf("%d\n",c-1);return 0;
}

辗转相除法——求最大公约数相关推荐

  1. 利用辗转相除法——求最大公约数(详解)

    辗转相除法 求最大公约数: 给定两个数,求这两个数的最大公约数 欧几里得算法又称辗转相除法,是指用于计算两个非负整数a,b的最大公约数.应用领域有数学和计算机两个方面.计算公式gcd(a,b) = g ...

  2. 多项式辗转相除法求最大公约数_辗转相除法求最大公约数

    辗转相除法求最大公约数 约数 如果数 a 能被数 b 整除,a 就叫做 b 的倍数,b 就叫做 a 的约数. 最大公约数 最大公约数就是两个数中,大家都能相约且最大的数. 辗转相除法 辗转相除法又名欧 ...

  3. 辗转相除法求最大公约数原理分析(附代码实现)

    辗转相除法求最大公约数原理分析(附代码实现) 前言 解释 原理分析 代码 结语 前言 辗转相除法用起来很简单,但是其原理却自己想不明白.于是乎看了几篇有关辗转相除法原理的分析,在这里自己写下自己的理解 ...

  4. c语言辗转相除法约分分数,更相损减法和辗转相除法 求最大公约数和最小公倍数(C语言)...

    假设有两个数a和b,求a,b的最大公约数和最小公倍数实际上是一个问题,得出这两个数的最大公约数就可以算出它们的最小公倍数. 最小公倍数的公式是 a*b/m m为最大公约数 因为 a=m*i; b=m* ...

  5. leetcode----1447.最简分数(辗转相除法求最大公约数)

    1447.最简分数 问题:给你一个整数 n ,请你返回所有 0 到 1 之间(不包括 0 和 1)满足分母小于等于 n 的 最简 分数 .分数可以以 任意 顺序返回. 示例: 输入:n = 2 输出: ...

  6. P30-P32:逻辑类型,保留小数的输出,辗转相除法求最大公约数

    ** P30-P32(逻辑类型,保留小数的输出,辗转相除法求最大公约数): ** boolean 代码作用如同上述代码中的isPrime,会用到boolean,将isPrime的int类型改为逻辑类型 ...

  7. 辗转相除法求最大公约数(Python)

    辗转相除法求最大公约数(Python) #辗转相除法 #1大数除以小数得到余数 #2用余数除以1中的除数得到余数 #3重复2直到余数等于0返回除数即为两数的最大公约数 def eucAlg(a,b): ...

  8. python辗转相除法求最大公约数最小公倍数_辗转相除法求最大公约数/最小公倍数...

    http://blog.csdn.net/jtujtujtu/article/details/4407171 2009 辗转相除法求最大公约数: 辗转相除法, 又名欧几里德算法(Euclidean a ...

  9. 辗转相除法求最大公约数,非goto

    1 #include<iostream> 2 using namespace std; 3 //不推荐用goto,当然用它更快 4 //辗转相除法求两数的最大公约数 5 int gcd(l ...

  10. 分别求两个整数的最大公约数和最小公倍数。_看不懂辗转相除法求最小公约数?以身相许那种哦!...

    给你打个比喻吧:你英雄救美了,美女想要报答你,你想要1000块感谢费,但是美女却想要以身相许 ,懂了吧,同样都是报答,只是用了不一样的方式,辗转相除法也是这样,你两个数的最大公约数不容易求,我就用另外 ...

最新文章

  1. hibernate-session中的方法
  2. 在XP SP3中启用支持NLA的远程桌面
  3. kmean之matlab
  4. Boost:双图bimap的范围标准方式的测试程序
  5. php软件开发--nginx服务器(待补充)
  6. Spring : Spring外部配置加载顺序
  7. 冬季美食不可少烤肉和火锅,最具诱惑的手绘肉食插画素材,让设计师勾引你的味蕾
  8. C++安全方向(二):2.5 Base58_比特币钱包地址_算法分析
  9. 不显示坐标刻度_Excel---不等距坐标刻度,你会吗?工作小技巧
  10. 逆向project实战--Afkayas.1
  11. IdentityServer4 中文文档 -11- (快速入门)添加基于 OpenID Connect 的用户认证
  12. mysql基本操作--数据库SQL操作
  13. 边工作边刷题:70天一遍leetcode: day 34-1
  14. 计算机科学梦想演讲稿,关于科技演讲稿讲话稿范文三篇
  15. vs2012 express 密钥
  16. 湘潭大学 计算机学院程诗婕,2019 CCF CCSP分赛区竞赛决出金银铜奖
  17. android 手机 跑分榜,Android手机哪家强?安兔兔鲁大师榜单见分晓!
  18. 带你读懂Pinbar交易信号
  19. 从输入URL到页面展示的详细过程
  20. vue+vantUI模板

热门文章

  1. 云原生之 Ansible 篇(一)
  2. 四川师范大学计算机系黄宇,黄宇-经济信息工程学院
  3. 《程序员的成长课》:增加收入的 3 大方向
  4. 吉他铺怎么看(很全)
  5. gird和flex布局
  6. 关乎Java多线程+Runnable和Thread…
  7. ide中tomcat乱码_彻底解决Intellij IDEA中文乱码问题(亲测成功)
  8. 工业农业消防自动检测及报警云方案
  9. 幼麟棋牌技术分享系列:H5棋牌游戏加载速度优化
  10. codesys电子凸轮挺杆点的设置与使用