求一个用c语言编写的,编写函数计算两个整数的所有公约数的编程

如题所述

好的,下面是一个用C语言编写的计算两个整数的所有公约数的函数:

#include <stdio.h>
#include <stdlib.h>

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

void common_divisors(int a, int b) {
int i, max;
max = gcd(a, b);
printf("The common divisors of %d and %d are:\n", a, b);
for (i = 1; i <= max; i++) {
if (a % i == 0 && b % i == 0) {
printf("%d\n", i);
}
}
}

int main() {
int x, y;
printf("Enter two numbers: ");
scanf("%d %d", &x, &y);
common_divisors(x, y);
return 0;
}
在这段代码中,我们定义了两个函数:gcd和common_divisors。 gcd函数用于计算两个整数的最大公约数,而common_divisors函数则用于打印出两个数的所有公约数。我们也定义了主函数main,它会提示用户输入两个数字,并调用common_divisors函数来计算和打印公约数。

要理解gcd函数的工作原理,我们可以使用欧几里得算法。这个算法基于结论:如果a和b是两个整数,r是它们的模(余数),那么a和b的最大公约数等于b和r的最大公约数。我们可以用循环来实现这个算法,每次用b的值去模a的值来更新b和a的值,如下所示:

while (b != 0) {
temp = a % b;
a = b;
b = temp;
}
对于common_divisors函数,我们计算了两个输入数的最大公约数. max,然后使用for循环找到所有能够同时整除这两个数的公因子,例如:

for (i = 1; i <= max; i++) {
if (a % i == 0 && b % i == 0) {
printf("%d\n", i);
}
}
希望这段代码可以帮助你解决问题。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-05-04
#include<stdio.h>
main()
{
int i,j,m;
printf("please press two num:");
scanf("%d%d",&i,&j);
m=i;
if(j<m)
{
m=j;
}
printf("gong yue shu is:");
for(m=j; m>0; m--)
{
if(i%m==0&&j%m==0)
{
printf("%d\b",m);
}
}
while(getchar()!='\n');
}追问

有错啊

追答

呵呵 这样对不对,手上没编译器。
#include
main()
{
int i,j,m;
printf("please press two num:");
scanf("%d%d",&i,&j);
m=i;
if(j0; m--)
{
if((i%m==0)&&(j%m==0))
{
printf("%d\b",m);
}
}
while(getchar()!='\n');
}

追问

没事的,我在看

本回答被提问者采纳
第2个回答  2011-05-04
int gcd(int m, int n)
{
int t;

while(m > 0)
{
if(n > m)
{
t = m;
m = n;
n = t;
}
m -= n;
}

return n;
}
相似回答