C语言的GCD函数
问题1。问题5(均匀可分)我尝试了暴力方法,但这需要时间,所以我参考了几个站点,发现了以下代码: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
#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)可以编写为简单循环的递归解决方案不适合使用递归。这是一个非常干净的解决方案,比公认的答案更容易理解。不过还有一个!