精华内容
下载资源
问答
  • 其计算原理依赖于下面的定理: 定理:gcd(a,b) = gcd(b,a mod b) (a>b 且a mod b 不为0) 证明:a可以表示成a = kb + r,则r = a mod b 辗转相除法是利用以下性质来确定两个正整数 a 和 b 的最大公因子的: ⒈ 若 r ...

    #include

    int fun(int a,int b)/* 2个数的公约数 */

    {

    int t;

    while(b)

    {

    t = a%b;

    a = b;

    b = t;

    }

    return a;

    }

    int main()

    {

    int a[100];

    int n;

    int i;

    int res;

    scanf("%d",&n);/* 先输入数的总数n */

    if(n < 2)

    {

    printf("n不能小于2\n");

    return 0;

    }

    for(i=0;i

    scanf("%d",&a[i]);

    res = fun(a[0],a[1]);

    for(i=2;i

    res = fun(res,a[i]);

    printf("%d\n",res);

    return 0;

    }

    ade6df7f03e4b5928c4fa78a6c734d93.png

    欧几里德算法又称辗转相除法,用于计算两个正整数a,b的最大公约数。

    其计算原理依赖于下面的定理:

    定理:gcd(a,b) = gcd(b,a mod b) (a>b 且a mod b 不为0)

    证明:a可以表示成a = kb + r,则r = a mod b

    辗转相除法是利用以下性质来确定两个正整数 a 和 b 的最大公因子的:

    ⒈ 若 r 是 a ÷ b 的余数,且r不为0, 则

    gcd(a,b) = gcd(b,r)

    ⒉ a 和其倍数之最大公因子为 a。

    另一种写法是:

    ⒈ 令r为a/b所得余数(0≤r

    若 r= 0,算法结束;b 即为答案。

    ⒉ 互换:置 a←b,b←r,并返回第一步。

    展开全文
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼有三种算法:1,欧几里得辗转相除法。2,开方算法。3,求素数的埃拉托塞尼筛法。其中3,已经解决,参见百度百科:素数普遍公式。其中2: 开立方公式:设A = X^3,求X.称为...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

    有三种算法:

    1,欧几里得辗转相除法。

    2,开方算法。

    3,求素数的埃拉托塞尼筛法。

    其中3,已经解决,参见百度百科:素数普遍公式。

    其中2:     开立方公式:

    设A = X^3,求X.称为开立方。 开立方有一个标准的公式:

    X(n+1)=Xn+(A/X^2-Xn)1/3    (n,n+1是下角标)

    例如,A=5,k=3,即求

    5介于1的3次方;至2的3次方;之间(1的3次方=1,2的3次方=8)

    初始值X0可以取1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8,1.9,都可以。例如我们取X0 = 1.9按照公式:

    第一步:X1=1.9+(5/1.9^2;-1.9)1/3=1.7。

    即5/1.9×1.9=1.3850416,1.3850416-1.9=-0.5149584,-0.5149584×1/3=-0.1716528,1.9+(-0.1716528)=1.7。即取2位数值,,即1.7。

    第二步:X2=1.7+(5/1.7^2;-1.7)1/3=1.71。

    即5/1.7×1.7=1.73010,1.73-1.7=0.03,0.03×1/3=0.01,1.7+0.01=1.71。取3位数,比前面多取一位数。

    第三步:X3=1.71+(5/1.71^2;-1.71)1/3=1.709.

    第四步:X4=1.709+(5/1.709^2;-1.709)1/3=1.7099

    这种方法可以自动调节,第一步与第三步取值偏大,但是计算出来以后输出值会自动转小;第二步,第四步输入值

    偏小,输出值自动转大。即5=1.7099^3;

    当然初始值X0也可以取1.1,1.2,1.3,。。。1.8,1.9中的任何一个,都是X1 = 1.7 > 。当然,我们在实际中初始值最好采用中间值,即1.5。 1.5+(5/1.5²-1.5)1/3=1.7。

    如果用这个公式开平方,只需将3改成2,2改成1。即

    X(n + 1) = Xn + (A / Xn − Xn)1 / 2.

    例如,A=5:

    5介于2的平方至3的平方;之间。我们取初始值2.1,2.2,2.3,2.4,2.5,2.6,2.7,2.8,2.9都可以,我们最好取 中间值2.5。 第一步:2.5+(5/2.5-2.5)1/2=2.2;

    即5/2.5=2,2-2.5=-0.5,-0.5×1/2=-0.25,2.5+(-0.25)=2.25,取2位数2.2。

    第二步:2.2+(5/2.2-2.2)1/2=2.23;

    即5/2.2=2.272,2.272-2.2=-0.072,-0.072×1/2=-0.036,2.2+0.036=2.23。取3位数。

    第三步:2.23+(5/2.23-2.23)1/2=2.236。

    即5/2.23=2.242,2.242-2.23=0.012,0.012×1/2=0.006,2.23+0.006=2.236.

    每一步多取一位数。这个方法又叫反馈开方,即使你输入一个错误的数值,也没有关系,输出值会自动调节,接近准确值。

    关于这个方法的说明;1980年王晓明利用牛顿二项式推出这个公式,找到江西师范大学,一位教授觉得面熟,当场又推演一遍,与牛顿切线法一样。辽宁鞍山的傅钟鹏在他的《数学雅典娜》一书中介绍,天津新蕾出版社。由于是牛顿的公式,作者王晓明不敢贪天之功。所以傅钟鹏老师在文章介绍也明确说明是由牛顿切线法推出。

    展开全文
  • 关于求最大公约数的辗转相除法,用C语言编写的源代码。
  • } 参考答案《programming in c 3rd edition》: int main(void) { int u, v, temp; printf("Please type in two nonnegative integers.\n"); scanf("%i%i", &u, &v); while (v != 0) { temp = u % v; u = v; v = ...

    实现过程。

    用大数a除小数b,直到余数为0,如果余数不为0{

    则将小数赋给大数,

    余数赋给小数

    }

    我的代码:

    int main(void) {

    int a, b,yushu;

    printf("input integer a:");

    scanf("%i",&a);

    printf("input integer b:");

    scanf("%i",&b);

    while((yushu = a % b) !=0){

    a = b;

    b = yushu;

    }

    printf("gcd is %i",b);

    return 0;

    }

    参考答案《programming in c 3rd edition》:

    int main(void) {

    int u, v, temp;

    printf("Please type in two nonnegative integers.\n");

    scanf("%i%i", &u, &v);

    while (v != 0) {

    temp = u % v;

    u = v;

    v = temp;

    }

    printf("Their greatest common divisor is %i\n", u);

    return 0;

    }

    go实现

    package main

    import "fmt"

    func main() {

    fmt.Printf("Please type in two nonnegative integers.\n")

    var u, v, temp int

    fmt.Scanf("%d%d", &u, &v)

    for v != 0 {

    temp = u % v

    u = v

    v = temp

    }

    fmt.Printf("Their greatest common divisor is %v", u)

    }

    展开全文
  • int gcd(int a, int b) { int temp; if (a < b) { temp = a; a = b; b = temp; } while (b != 0) { temp = a % b; a = b; b = temp; } ...
    int gcd(int a, int b)
    {
        int temp;
        if (a < b) {
            temp = a;
            a = b;
            b = temp;
        }
        while (b != 0) {
            temp = a % b;
            a = b;
            b = temp;
        }
        return a;
    }

     

    展开全文
  • 满意答案junj270推荐于 2017.11.23采纳率:59%等级:8已帮助:1959人用辗转相除法(即欧几里得算法)求两个正整数的最大公约数.解析:设两个数m,n,假设m>=n,用m除以n,求得余数q.若q为0,则m为最大公约数;若q不等于0...
  • 辗转相除法最大的用途就是用来求两个数的最大公约数。用(a,b)来表示a和b的最大公约数。有定理: 已知a,b,c为正整数,若a除以b余c,则(a,b)=(b,c)。 (证明过程请参考其它资料)例:求 15750 与27216的最大公约数。解:...
  • 满意答案smrmhm2013.06.03采纳率:40%等级:12已帮助:12477人辗转相除法 百科名片 欧几里德辗转相除法, 又名欧几里德算法(Euclidean algorithm)乃求两个正整数之最大公因子的算法。它是已知最古老的算法, 其可追溯...
  • 《高三数学教案:算法案例――辗转相除法》由会员分享,可在线阅读,更多相关《高三数学教案:算法案例――辗转相除法(7页珍藏版)》请在人人文库网上搜索。1、算法案例 辗转相除法育才中学潘敏一、教材分析选自苏教...
  • 辗转相除法最大的用途就是用来求两个数的最大公约数。用(a,b)来表示a和b的最大公约数。有定理: 已知a,b,c为正整数,若a除以b余c,则(a,b)=(b,c)。 (证明过程请参考其它资料)例:求 15750 与27216的最大公约数。解:...
  • #include void main() { int m=46; int n=128; int a; int b=n%m; while (b!=0){ a=m%b; if(a==0) break; b=a; } printf("%d",b) }
  • 求最大公约数(辗转相除法

    万次阅读 多人点赞 2019-06-03 16:20:50
    最大公约数(Greatest Common Divisor)指两个或多个整数共有约数中最大的...求最大公约数有多种 方法,常见的有质因数分解法、短除法、辗转相除法、更相减损法。与最大公约数相对应的概念是最小公倍数,a,b的 最小...
  • #include //辗转相除法算两个数的最大公约数/*(eg18 12)m n t18 1212 6 66 0 0*/int main(void){int m,n,t;scanf("%d%d",&m,&n);while(n!=0){t=m%n;m=n;n=t;printf("m=%d,n=...
  • 辗转相除法

    2020-02-06 14:17:49
    辗转相除法 辗转相除法相信大家大学经常接触,但初次接触到可能不是那么容易理解,那么话不多说,我跟大家分享一下我的理解。 关于辗转相除法的专业解释有很多,我在这就不再赘述,大家可以自己搜搜看,我这直接上...
  • 辗转相除法C语言

    2021-01-11 00:20:16
    =0,则m=n,n=r,再回去执行① #include int gongyue(int m,int n) /*辗转相除法求最大公约数*/ { int r; if(m==n) return m; else while((r=m%n)!=0) { m=n; n=r; } return n; } int gongbei(int m,int n...
  • gcd/辗转相除法的证明 此文仅供蒟蒻参考,dalao请我也不记得是左上角还是右上角了。 前言 这不是小学奥数吗? 数学上来先打表,数论只会gcd。 上面几句话一直打击我学习数论的信心。 不仅只会gcd,连gcd都...
  • 辗转相除法求最大公约数 除了暴力枚举法求最大公约数外,我们还能用更加高效的方法求最大两个整数的最大公约数 那就是辗转相除法 原理:两个正整数a和b(a>b),其最大公约数等于a除以b的余数c和b之间的最大公...
  • 辗转相除法最大的用途就是用来求两个数的最大公约数。下面通过本文给大家介绍C语言辗转相除法求2个数的最小公约数,非常不错,感兴趣的朋友一起看看吧
  • C语言辗转相除法求最大公约数

    万次阅读 多人点赞 2019-04-04 07:45:54
    辗转相除法是在在维基百科中的意思是: 在数学中,辗转相除法,又称欧几里得算法(英语:Euclidean algorithm),是求最大公约数的算法。辗转相除法首次出现于欧几里得的《几何原本》(第VII卷,命题i和ii)中,而在...
  • 图解辗转相除法

    千次阅读 2019-11-25 23:25:32
    虽然在很久很久以前刚入门ACM的时候就已经知道辗转相除法的存在,并且也用GCD解了不少题,不过说实话辗转相除法的原理一直不是很清楚。 直到最近做到这样一道题: Codeforces - 343A,本以为是一道憨批构造,结果构造...
  • 辗转相除法,一种求最大公约数的算法已知:A / B = C ······ R (A、B、C、R皆是整数)假设:D是A的余数,D也是B的余数,那么D就是A和B的公约数D是A和B的约数,则A和B是D的倍数,B * C也是D的倍数既然A与B*C都是...
  • 在数学中,辗转相除法,又称欧几里得算法,是求最大公约数的算法。辗转相除法首次出现于欧几里得的《几何原本》(第VII卷,命题yⅠ和Ⅱ)中,而在中国则可以追溯至东汉出现的《九章算术》。两个整数的最大公约数是能够...
  • 辗转相除法详解(C语言实现)

    千次阅读 2020-11-05 08:51:00
    辗转相除法,被称为欧几里得(Euclidean)算法,是求最大公约数的算法。 基本原理 两个正整数a和b(a > b),他们的最大公约数等于a除以b的余数和b之间的最大公约数。 算法实现 思想 a = b * q1 + r1 b = r1 * q2 +...
  • 辗转相除法辗转相除法」又叫做「欧几里得算法」,是公元前 300 年左右的希腊数学家欧几里得在他的著作《几何原本》提出的.利用这个方法,可以较快地求出两个自然数的最大公因数,即 HCF 或叫做 gcd.所谓最大公因数,是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,565
精华内容 4,226
关键字:

辗转相除法c