首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >欧氏算法(求最大公因子)

欧氏算法(求最大公因子)
EN

Code Golf用户
提问于 2015-09-24 04:29:06
回答 8查看 2.1K关注 0票数 22

挑战

编写一个程序或函数,该程序或函数接受两个输入整数ij,并输出它们的最大公因子;使用欧氏算法计算(见下文)。

输入

输入可以作为ij的以空格分隔的字符串表示形式,也可以看作是两个独立的整数。您可以假设整数小于或等于10,000。您还可以假设输入整数不会是彼此的质数。

欧氏击穿

ij之间的较大数目除以尽可能小的次数。然后,添加其余部分。使用余数和前一个数字重复此过程,直到余数变为0

例如,如果输入是1599 650

代码语言:javascript
复制
1599 = (650 * 2) + 299
 650 = (299 * 2) +  52
 299 =  (52 * 5) +  39
  52 =  (39 * 1) +  13
  39 =  (13 * 3) +   0

最后一个数,13,是两个输入整数的最大公因子。它可以形象化如下:

输出

您的输出必须是上面形式的细分,然后是换行符和GCD。它可以通过任何介质输出。

示例

输入

代码语言:javascript
复制
18 27
50 20
447 501
9894 2628

输出

代码语言:javascript
复制
27 = (18 * 1) + 9
18 =  (9 * 2) + 0
9

50 = (20 * 2) + 10
20 = (10 * 2) +  0
10

501 = (447 * 1) + 54
447 =  (54 * 8) + 15
 54 =  (15 * 3) +  9
 15 =   (9 * 1) +  6
  9 =   (6 * 1) +  3
  6 =   (3 * 2) +  0
3

9894 = (2628 *  3) + 2010
2628 = (2010 *  1) +  618
2010 =  (618 *  3) +  156
 618 =  (156 *  3) +  150
 156 =  (150 *  1) +    6
 150 =    (6 * 25) +    0
6

注:输出不需要间隔,因为它们在上面。间距只是为了清晰。需要括号。

奖金

如果你的输出和上面一样,你可以在你的分数上加10%的加值.

EN

回答 8

Code Golf用户

回答已采纳

发布于 2015-09-24 09:15:02

Pyth,33字节

代码语言:javascript
复制
ASQWGs[H\=\(G\*/HG\)\+K%HG)A,KG)H

在线试用:游行示威测试套房

解释:

代码语言:javascript
复制
ASQWGs[H\=\(G\*/HG\)\+K%HG)A,KG)H
  Q                                read the two numbers from input
 S                                 sort them
A                                  and assign them to G and H
   WG                              while G != 0:
                      K%HG           assign H mod G to K
     s[H\=\(G\*/HG\)\+K   )          join the following list items and print:
                                        H=(G*(H/G))+K
                           A,KG      assign K, G to G, H
                               )   end while
                                H  print H
票数 4
EN

Code Golf用户

发布于 2015-09-24 08:25:47

Python 2,70

代码语言:javascript
复制
f=lambda a,b:b and'%d=(%d*%d)+%d\n'%(a,b,a/b,a%b)*(a>=b)+f(b,a%b)or`a`

返回多行字符串的递归函数。函数创建第一行,然后用欧几里德算法中的下一对数字将其附加到递归结果中。一旦第二个数字为零,我们就以另一个数字的字符串作为大小写,将其打印在它自己的行的末尾。

格式化是通过字符串替换完成的,使用整数除法来获得乘法器。

一个打嗝是需要开始的较大的数字被采取的模式,较小的数字。方便地,如果数字是在错误的顺序,第一步的欧几里德算法翻转他们。要防止显示此步骤,只需在第一个数字至少是第二个数字的情况下添加当前行(例如,f(9,9))。

票数 6
EN

Code Golf用户

发布于 2015-09-27 12:43:37

C++,GCC编译器,171个字节( -10%,所以154个字节)

好吧那我第一次试..。

代码语言:javascript
复制
#include<iostream>
using namespace std;
int main()
{
    int a,b,c;
    cin>>a>>b;
    if(a<b)
    swap(a,b);
    while(b>0)
    {
        c=a;
        cout<<a<<" = ("<<b<<" * "<<a/b<<") + "<<a%b<<endl;
        a=b;
        b=c%b;
    }
    cout<<a;
}

小贴士编码高尔夫非常感谢。

在使用c++时,是否需要计算标准头文件和int的字节数?不包括它,减少50个字节。

票数 4
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/58565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档