Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言的GCD函数_C - Fatal编程技术网

C语言的GCD函数

C语言的GCD函数,c,C,问题1。问题5(均匀可分)我尝试了暴力方法,但这需要时间,所以我参考了几个站点,发现了以下代码: #include<stdio.h> int gcd(int a, int b) { while (b != 0) { a %= b; a ^= b; b ^= a; a ^= b; } return a; } int lcm(int a, int b) { return a / g

问题1。问题5(均匀可分)我尝试了暴力方法,但这需要时间,所以我参考了几个站点,发现了以下代码:

#include<stdio.h>
int gcd(int a, int b)
{
    while (b != 0)
    {
        a %= b;
        a ^= b;
        b ^= a;
        a ^= b;
    }

    return a;
}

int lcm(int a, int b)
{
    return a / gcd(a, b) * b;
}

int main()
{
    int res = 1;
    int i;
    for (i = 2; i <= 20; i++)
    {
        res = lcm(res, i);
    }

    printf("%d\n", res);
    return 0;
}
#包括
内部gcd(内部a、内部b)
{
而(b!=0)
{
a%=b;
a^=b;
b^=a;
a^=b;
}
返回a;
}
内部lcm(内部a、内部b)
{
返回a/gcd(a,b)*b;
}
int main()
{
int res=1;
int i;

对于(i=2;i到您的第二个问题:GCD函数使用。它计算A mod B
,然后用A替换A和B。更可读的版本可能如下所示:

int gcd(int a, int b)
{
    int temp;
    while (b != 0)
    {
        temp = a % b;

        a = b;
        b = temp;
    }
    return a;
}

这个问题也可以通过递归以非常简洁的方式解决:

int gcd(int a, int b) {
    int remainder = a % b;

    if (remainder == 0) {
        return b;
    }

    return gcd(b, remainder);
}

我为GCD执行了以下语句:

#include<stdio.h>
#include<conio.h>
int main(){
   int l, s,r;

   printf("\n\tEnter value : ");
   scanf("%d %d",&l,&s);

  while(l%s!=0){
    r=l%s;
    l=s;
    s=r;
  }
  printf("\n\tGCD = %d",s);
  getch();
}
#包括
#包括
int main(){
int l,s,r;
printf(“\n\t输入值:”);
scanf(“%d%d”、&l和&s);
而(l%s!=0){
r=l%s;
l=s;
s=r;
}
printf(“\n\tGCD=%d”,s);
getch();
}

使用一点递归和Objective-C

-(int)euclid:(int)numA numB:(int)numB
{
    if (numB == 0)
        return numA;
    else
        return ([self euclid:numB numB:numA % numB]);
}

欢迎使用Stack Overflow!如果您亲自尝试解决此问题,我们将更有可能为您提供帮助。通过这种方式,您还将学到更多内容--您的目标是学习C,对吗?:)祝你好运,祝你编码愉快!谷歌搜索“Siever Eratosthenes”可以找到很多解释它的网站。如果你的搜索引擎没有,那是时候切换了。欢迎来到StackOverflow。这个网站是围绕着每个帖子一个问题的概念设计的。你显然问了三个完全不同的问题(一个是关于问题7,一个是关于问题5,一个是关于Erasosthenes筛)。请回答您的问题并删除其中两个问题;您可以在那里分别写文章并分别询问其他人。在编辑时,您还可以将主题更改为有用的内容。“Project Euler怀疑”对于以后的搜索没有意义。如果您需要,和页面上会有更多关于如何工作的信息。谢谢。:-)这是GCD的有趣代码。3个xor操作交换
a
b
,但更容易编写:
int-GCD(int-x,int-y){int-r;if(x)可以编写为简单循环的递归解决方案不适合使用递归。这是一个非常干净的解决方案,比公认的答案更容易理解。不过还有一个!