算法--欧几里得

这是一个好东西.

它是用来求两个数的最大公因数.

思路:辗转相除法.每次a % b,如果余数等于1,则余数的值给b.

如果大于1,那么继续将除数%余数.

代码如下:

 1 //欧几里得算法
 2 #include <iostream>
 3 using namespace std;
 4 int gcd(int a,int b){
 5     return b==0?a:gcd(b,a%b);
 6 }
 7 int main(){
 8     int a,b;
 9     while(cin>>a>>b){
10         cout<<gcd(a,b)<<endl;
11     }
12     return 0;
13 }
时间: 2024-11-08 18:56:43

算法--欧几里得的相关文章

【算法学习】双调欧几里得旅行商问题(动态规划)(转)

双调欧几里得旅行商问题是一个经典动态规划问题.<算法导论(第二版)>思考题15-1和北京大学OJ2677都出现了这个题目. 旅行商问题描述:平面上n个点,确定一条连接各点的最短闭合旅程.这个解的一般形式为NP的(在多项式时间内可以求出) J.L. Bentley 建议通过只考虑双调旅程(bitonictour)来简化问题,这种旅程即为从最左点开始,严格地从左到右直至最右点,然后严格地从右到左直至出发点.下图(b)显示了 同样的7个点的最短双调路线.在这种情况下,多项式的算法是可能的.事实上,存

《算法导论》思考题15-1 双调欧几里得旅行商问题(动态规划)

欧几里得旅行商问题 是对平面上给定的n个点确定一条连接各点的最短闭合旅程的问题.图a给出了7个点问题的解,这个问题的一般形式是NP完全的,故其解需要多于多项式的时间. J.K.Bentley建议通过只考虑双调旅程来简化问题,这种旅程即为从最左点开始,严格从左到最右点,再严格地从最右点回到最左点.图b显示了同样的7个点的问题的最短双调路线,在这种情况下,多项式的时间的算法是有可能的. 描述一个确定最优双调路线的O(n^2)时间的算法.可以假设任何两点的x坐标都不相同. 解法: 读了很多遍这个题,也

实验一 算法问题求解基础--欧几里得递归算法和递归算法

1.欧几里得递归算法 2.欧几里得迭代算法 3.连续整数检测算法 4.递归算法 实验一算法问题求解基础 实验名称:算法问题求解基础 实验章节:算法设计与分析第一章内容 实验内容 第一部分 欧几里得算法求最大公约数 问题: 1. 计算:34931与 75236 的最大公约数: 1 #include<iostream.h> 2 3 //1.欧几里得递归算法 4 void Swap(int&a,int&b) 5 { 6 int c=a;a=b;b=c; 7 } 8 9 int RGc

浅谈关于欧几里得的一系列算法

浅谈关于欧几里得的一系列算法 --------- 这里有个叫分界线的家伙说,本章的所有讨论均在整数的范围中,所有除法都为带余除法o---------------- 朴素欧几里得算法 又名辗转相除法,代码实现如下: int gcd(int a, int b) // a >= b { if(b == 0) return a; return gcd(b, a % b) } 想一想为什么可以这样计算? 我们设 \(a=k_1m, \ b=k_2m \ ,gcd(a,b)=m,\ gcd(k_1,k_2)

欧几里德算法 以及 欧几里得拓展

一.欧几里得算法 二.欧几里得拓展 一. 欧几里得算法: gcd(a,b) = gcd(b,a mod b) (b < a) int gcd(int x,int y){ if(y == 0) return x; if(y > 0) return f(y,x%y);//即使 y > x, 调用 gcd ( y , x%y) 就等于互换 y与x. } int gcd(int x,int y){ return y ? gcd(y,x%y) : x; } 二. 拓展欧几里得算法: 原文地址:ht

bzoj4517: [Sdoi2016]排列计数--数学+拓展欧几里得

这道题是数学题,由题目可知,m个稳定数的取法是Cnm 然后剩下n-m本书,由于编号为i的书不能放在i位置,因此其方法数应由错排公式决定,即D(n-m) 错排公式:D[i]=(i-1)*(D[i-1]+D[i-2]); 所以根据乘法原理,答案就是Cnm * D(n-m) 接下来就是怎么求组合数的问题了 由于n≤1000000,因此只能用O(n)的算法求组合,这里用乘法逆元(inv[])来辅助求组合数 即 Cnm = n! / ((n-m)! * m!) = fac[n]*inv[n-m]*inv[

2014年百度之星程序设计大赛 - 资格赛 1002 Disk Schedule(双调欧几里得旅行商问题)

Problem Description 有很多从磁盘读取数据的需求,包括顺序读取.随机读取.为了提高效率,需要人为安排磁盘读取.然而,在现实中,这种做法很复杂.我们考虑一个相对简单的场景.磁盘有许多轨道,每个轨道有许多扇区,用于存储数据.当我们想在特定扇区来读取数据时,磁头需要跳转到特定的轨道.具体扇区进行读取操作.为了简单,我们假设磁头可以在某个轨道顺时针或逆时针匀速旋转,旋转一周的时间是360个单位时间.磁头也可以随意移动到某个轨道进行读取,每跳转到一个相邻轨道的时间为400个单位时间,跳转

POJ2677 Tour(DP+双调欧几里得旅行商问题)

Tour Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3929   Accepted: 1761 Description John Doe, a skilled pilot, enjoys traveling. While on vacation, he rents a small plane and starts visiting beautiful places. To save money, John must

gcd,扩展欧几里得,中国剩余定理

1.gcd: int gcd(int a,int b){ return b==0?a:gcd(b,a%b); } 2.中国剩余定理: 题目:学生A依次给n个整数a[],学生B相应给n个正整数m[]且两两互素,老师提出问题:有一正整数ans,对于每一对数,都有:(ans-a[i])mod m[i]=0.求此数最小为多少. 输入样例: 1 10 2 3 1 2 3 2 3 5 8 1 2 3 4 5 6 7 8 97 89 67 61 59 53 47 88 12 1 2 3 4 5 6 7 8 9