c语言,用分解质因数的方法求两个数的最大公约数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言,用分解质因数的方法求两个数的最大公约数相关的知识,希望对你有一定的参考价值。
void fenjie(int n)
int i;
printf("%d=",n);
while(n%2==0)
printf("%d*",2);
n/=2;
for(i=3;i<=sqrt(n);i+=2)
if(n%i==0)
n/=i;
printf("%d*",i);
i-=2;
printf("%d\n",n);
int main()
int a;
scanf("%d",&a);
fenjie(a);
return 0;
分解质因数已经写好,然后求大神补全代码!!!
主要通过循环控制语句求去两个数的最大公约数。
具体的实现方法可以参考如下函数:
// 最大公约数函数int GreatestCommonDivisor(int m, int n)
int temp;
if(m<n) // 取m,n中较大的一个数,m中存放较大的数,n中存放较小的数
// 不通过引入中间变量,通过异或运算来交换两个数的值
m = m^n;
n = n^m;
m = m^n;
temp = m % n; // 取出m除以n的余数
// 反复分解质因数进行求最大公约数
while(temp)
m = n; // 将n值赋值给m
n = temp; // 将余值赋值给n
temp = m % n; // 求余
return n; // 返回最大公约数
参考技术A 主要通过循环控制语句求去两个数的最大公约数。
具体的实现方法可以参考如下函数:
// 最大公约数函数
int GreatestCommonDivisor(int m, int n)
int temp;
if(m
评论
0
0
0
加载更多 参考技术B 求最大公约数为什么要分解质因数?分别得到两个数的质因数序列,怎么求公约数呢
c语言求两个数的最大公因数(穷举法,欧几里得算法,递归)
/*主函数Gcd为求公因数的函数输入为负时返回-1*/
int main()
{
int a, b;
printf("Input a,b:");
scanf("%d,%d",&a,&b);
if (a < 0 || b < 0)
printf("Input number should be positive!\n");
else
printf("Greatest Common Divisor of %d and %d is %d\n",a,b,Gcd(a,b));
return 0;
}
/*穷举法一(欧几里得)*/
int Gcd(int a,int b)
{
int i,t;
if(a<=0 || b<=0)
return -1;
t=a<b ? a : b;
for(i=t;i>0;i--)
{
if(a%i==0 && b%i==0)return i;
}
return 1;
}
/*穷举法二*/
int Gcd(int a,int b)
{
int r;
if(a<=0 || b<=0)
return -1;
do
{
r=a%b;
a=b;
b=r;
}while(r!=0);
return a;
}
/*递归一*/
int Gcd(int a,int b)
{
if(a<=0 || b<=0)
return -1;
if(a%b==0)
return b;
else
return Gcd(b,a%b);
}
/*递归二*/int Gcd(int a, int b)
{
if (a <= 0 || b <= 0)
return -1;
while (a != b)
{
if (a > b)
a = a - b;
else if (b > a)
b = b - a;
}
return a;
}
/*递归二是根据公因数的如下性质:
根据最大公约数的如下3条性质,采用递归法编写计算最大公约数的函数Gcd(),
在主函数中调用该函数计算并输出从键盘任意输入的两正整数的最大公约数。
性质1 如果a>b,则a和b与a-b和b的最大公约数相同,即Gcd(a, b) = Gcd(a-b, b)
性质2 如果b>a,则a和b与a和b-a的最大公约数相同,即Gcd(a, b) = Gcd(a, b-a)
性质3 如果a=b,则a和b的最大公约数与a值和b值相同,即Gcd(a, b) = a = b
*/
以上是关于c语言,用分解质因数的方法求两个数的最大公约数的主要内容,如果未能解决你的问题,请参考以下文章