TOJ1164: 最大公因子

 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4
 5 int fun(int m, int n)
 6 {
 7     int max_commondivisor;
 8     int m1 = max(m, n), n1 = min(m,n);
 9     int r = m1%n1;
10     while (1)
11     {
12         if (r == 0)
13         {
14             max_commondivisor = n1; break;
15         }
16         else
17         {
18             m1 = n1;
19             n1 = r;
20             r = m1%n1;
21         }
22     }
23     return max_commondivisor;
24 }
25
26 int main()
27 {
28     int m,n;
29     while (cin >> m>>n, m||n)
30     {
31         cout <<fun(m,n)<< endl;
32     }
33     return 0;
34 }

大数取余小数,小数取代大数,余数取代小数,直到余数取为0,最大公因子即为此时的小数。

时间: 2024-08-10 15:08:55

TOJ1164: 最大公因子的相关文章

求最大公因子

问题: (穷举法)求两个数的最大公因子,对于输入的a.b的值,首先确定较小者min,即当a<b时,min=a:当a>b时min=b,然后依次测试min-1,min-2,min-3,....,1,而最先能同时被a,b整除的那个数,就是a和b的最大公因子.一旦找到最大公因子,无需继续测试下去. 1 /*求a,b的最大公因子*/ 2 #include<stdio.h> 3 int main() 4 { 5 int a,b,min,k; 6 do 7 { 8 printf("En

最大公因子求法

为方便讨论,m=max(m,n) n=min(m,n) 方法1:t=n 判断t是不是n的因子 判断t是不是m的因子 优化:只在n的因子中考察t 方法2:n,m作因式分解,提取公共小因子的乘积 相关子问题:筛选法得到质数表 思考,拓展 1.用质数表优化算法 2.算法输入数量的变化:多个整数求最大公因子 3.m=2x(m/2)成对考察因子 4.提前结束算法:m,n为不相等质数 m,n整除 5.维护每个数的最大公因子 6.算法的组合使用 设想算法 1.维护每个整数的最大因子,对于每个整数,在log时间

Alice and Bob

Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Status Description It is so boring in the summer holiday, isn't it? So Alice and Bob have invented a new game to play. The rules are as follows. First, they get a se

数论及其应用——欧几里得算法

欧几里得是数论当中最基本的定理,以其为基础的拓展欧几里得算法在解决同余方程.求模逆元等问题. 首先来介绍几个概念,数论当中一些基本的概念其实在小学就学过,但是很长一段时间并没有用到它们,因此这里再拿出来温习一下. 我们常常用a|b来表示b能够整除a(b > a),即b/a是整数,但是“|”在使用的过程中容易和绝对值.几何定义符.条件概率混淆,所以,这里我们用a\b来表示a能够整除b. 约数:如果b\a,则称b是a的约数. 倍数:如果b\a,则称a是b的倍数. 最大公约数:gcd(a,b) = m

python 练习 7

#!/usr/bin/python # -*- coding: utf-8 -*- def gcd(x,y): #最大公因子 if x>y:x%=y while x: x,y=y%x,x return y def lcm(x,y): #最小公倍数 return x*y/gcd(x,y) def jhua(x): t=gcd(x[0],x[1]) return [x[0]/t,x[1]/t] def z42(): x,y=(120,36) print x,y,"的最小公倍数是",l

两数的最大公约数、最小公倍数

几个整数,公有的约数,叫做这几个数的公约数:其中最大的一个,叫做这几个数的最大公约数.例如:12.16的公约数有±1.±2.±4,其中最大的一个是4,4是12与16的最大公约数,一般记为(12,16) = 4.12.15.18的最大公约数是3,记为(12,15,18) = 3.    几个自然数公有的倍数,叫做这几个数的公倍数,其中最小的一个自然数,叫做这几个数的最小公倍数.例如:4的倍数有±4.±8.±12.±16,--,6的倍数有±6.±12.±18.±24,--,4和6的公倍数有±12.±

杭电ACM分类

杭电ACM分类: 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze 广度搜索1006 Redraiment猜想 数论:容斥定理1007 童年生活二三事 递推题1008 University 简单hash1009 目标柏林 简单模拟题1010 Rails 模拟题(堆栈)1011 Box of Bricks 简单题1012 IMMEDIATE DECODABILITY

HDU2879 HeHe 数论积性函数

题目名字有点搓,做题时没做出来,学长他们做出了,发现跟网上题解的思路没太大区别,网上所有题解的分析也都转自同一个地方,看样子这道题目不是那么好想的,没办法按照解析画了半天,计算器按了半天,理解了,自己敲出来了,觉得值得留念,打算再刷几道这样的 转自:http://blog.csdn.net/kksleric/article/details/8096914 定义:对于正整数n的一个算术函数 f(n),若f(1)=1,且当a,b互质时f(ab)=f(a)f(b),在数论上就称它为积性函数.若对于某积

RSA算法初学

RSA的算法涉及三个参数,n.e1.e2. 其中,n是两个大质数p.q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度. e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1)互质:再选择e2,要求(e2*e1)mod((p-1)*(q-1))=1. (n,e1),(n,e2)就是密钥对.其中(n,e1)为公钥,(n,e2)为私钥.[1] RSA加解密的算法完全相同,设A为明文,B为密文,则:A=B^e2 mod n:B=A^e1 mod n:(公钥加密体制中,一般用