編程求最大公約數和最小公倍數
1. 編程實現輸入兩個整數,輸出其最大公約數和最小公倍數。
舉例:輸入兩個正整數m和n,輸出它們的最小公倍數和最大公約數。
代碼:
#include <stdio.h>
int main(void)
{
int gcd, lcm, m, n;
int repeat, ri;
scanf("%d", &repeat);
for(ri = 1; ri <= repeat; ri++)
{
scanf("%d", &m);
scanf("%d", &n);
if(m <= 0 || n <= 0)
{ printf("m <= 0 or n <= 0");
continue;
}
for(gcd=m; gcd >= 1; gcd--){
if(m % gcd == 0 && n % gcd == 0) break;
}
lcm = m * n / gcd;
printf("%d, %d ",lcm, m, n, gcd, m, n);
}
}
運行效果:
輸入輸出示例:括弧內為說明
輸入:
3(repeat=3)
37(m=3,n=7)
244(m=24,n=4)
2418(m=24,n=18)
輸出:
21,1.
24,4.
72,6.
(1)編程求最大公約數和最小公倍數擴展閱讀:
輾轉相除法:
#include <stdio.h>
int main()
{
int m,n;
scanf("%d %d",&a,&b); //輸入兩個整數
int num1,num2,c; //num1,num2作為計算時的變數,c作為中間變數
if(a>=b) {num1=a; num2=b; }
else {num1=b; num2=a; }//通過比較對num1和num2賦值,便於計算
while(num2>0){
c=num1%num2;
num1=num2;
num2=c;}//輾轉相除,num2=0時,num1=最大公因數
printf("最大公因數:%d ",num1);
printf("最小公倍數:%d "m*n/num1);
return 0;
}
2. c語言編程求輸入兩個數的最大公約數和最小公倍數,怎麼做
輸入兩個正整數m和n,求其最大公約數和最小公倍數.用輾轉相除法求最大公約數 演算法描述:m對n求余為a,若a不等於0 則 m 0)
{
m_cup = m;
#include<stdio.h>
voidmain()
{
intm,n,m1,n1,t;
printf("請輸入兩個數(用空格隔開):");
scanf("%d%d",&m,&n);
if(n>m)
{
t=m;
m=n;
n=t;
}
m1=m;
n1=n;
while(n!=0)
{
t=m%n;
m=n;
n=t;
}
printf("%d和%d的最大公約數是:%d
",m1,n1,m);
printf("最小公倍數是:%d
",m1*n1/m);
}
3. 請用C語言編程求兩個數的最大公約數和最小公倍數
一樓的回答不對啊,你求的是最小公約數而不是最小公倍數,兩個整數的最小公約數永遠是1,應該這樣改:
main()
{
int
x,y,a,m,n,t;
printf("please
input
two
num
x,y\n");
scanf("%d,%d",&x,&y);
for(a=x<y?x:y;a>0;a--)
if(x%a==0&&y%a==0)
{
printf("x,y的最大公約數是
%d\n",a);
break;
}
m=x/a;
n=y/a;
t=a*m*n;
printf("x,y的最小公倍數是
%d\n",t);
}
4. c語言編程求最大公約數和最小公倍數
#include<stdio.h>
int
main()
{
int
m,n;
int
divisor,dividend,res;/*除數
被除數
余數*/
scanf("%d%d",&m,&n);
if(m>0&&n>0)
{
if(m>=n)
{
divisor=n;
dividend=m;
}
else
{
divisor=m;
dividend=n;
}
res=dividend%divisor;
while(res!=0)//循環體是三條語句,不加大括弧循環只執行一條語句
{
dividend=divisor;
divisor=res;
res=dividend%divisor;
}
printf("%d",divisor);
}
else
printf("error!\n");
return
0;
}
兩數相乘除以最大公約數就是最小公倍數
5. 編程,求最大公約數和最小公倍數
#include <stdio.h>
int main()
{
int a,b,c,m,t;
printf("請輸入兩個數: ");
scanf("%d%d",&a,&b);
if(a<b)
{
t=a;
a=b;
b=t;
}
m=a*b;
c=a%b;
while(c!=0)
{
a=b;
b=c;
c=a%b;
}
printf("最大公約數是: %d ",b);
printf("最小公倍數是: %d ",m/b);
}
(5)編程求最大公約數和最小公倍數擴展閱讀
演算法思想
利用格式輸入語句將輸入的兩個數分別賦給 a 和 b,然後判斷 a 和 b 的關系,如果 a 小於 b,則利用中間變數 t 將其互換。
再利用輾轉相除法求出最大公約數,進而求出最小公倍數。最後用格式輸出語句將其輸出。
#include<stdio.h>是在程序編譯之前要處理的內容,稱為編譯預處理命令。編譯預處理命令還有很多,它們都以「#」開頭,並且不用分號結尾,所以是c語言的程序語句。
6. 編程求兩個整數的最大公約數和最小公倍數
#include<stdio.h>
/*最大公約數*/
intGreatestCommonDivisor(intm,intn)
{
intr;
do
{
r=m%n;
m=n;
n=r;
}while(r!=0);
returnm;
}
/*最小公倍數*/
intLeastCommonMultiple(intm,intn)
{
returnm/GreatestCommonDivisor(m,n)*n;
}
intmain(void)
{
intm,n;
printf("請輸入兩個數字:");
scanf("%d%d",&m,&n);
printf("最大公約數是%d。 ",GreatestCommonDivisor(m,n));
printf("最小公倍數是%d。 ",LeastCommonMultiple(m,n));
return0;
}
7. c語言編程最大公約數最小公倍數
while(scanf("%d%d",&m,&n), m<0 || n<0); j=m; while(j/n!=0) //在這層循環中只有一條語句 j=j+m; 當j/n!=0的時候循環語句繼續執行 j=j+m; //接下來我覺得程序有問題,比如說20與25代入程序:20/25=0,直接結束循環,輸出 20,結果明顯錯誤,那下一步求最小公倍數就更是錯的了。 k=(m*n)/j; printf("最小公倍數是%d\n最大公約數是%d\n ",k,j); 第二道題: void main() { int p,r,n,m,temp; printf("請輸入兩個正整數n,m:"); scanf("%d,%d",&n,&m); if (n<m) //此步是將大數字賦值給m {temp=n; n=m; m=temp; } p=n*m; while (m!=0) {r=n%m; //小的數字和大數字取余結果必定是原來的小數字,大和小取余結果相當於減去 小的數 n=m; //這種求公約數原理就是利用求余來減少重復相減的次數,其實也就屬於輾轉相除法 m=r; //輾轉相除法就是對於給定的兩個數,用較大的數除以較小的數,若余數不為零,則將對余數和較小的數構成新的一對數,繼續上面的除法,直到大數被小數除盡,則這時較小的數就是原來兩倍的最大公約數。
8. 用c語言編程輸入兩個整數,求其最大公約數和最小公倍數
#include"stdio.h"
main()
{
intm,n,t,h,a,b,q;
printf("輸入m,n的值:");
scanf("%d%d",&m,&n);
a=m;
b=n;
if(n>m)
{t=m;m=n;n=t;}
while(m%n!=0)
{h=n;n=m%n;m=n;}
a=a/n;b=b/n;q=a*b*n;
printf("兩數最大公約數為%d,最小公倍數為%d ",n,q);
}
9. c語言編程:輸入兩個正整數,求最大公約數和最小公倍數
#include
voidmain(){
inta,b,n1,n2,t;
while(true)
{
printf("任意輸入兩個正整數: ");
scanf("%d%d",&n1,&n2);
if(n1
{
t=n1;
n1=n2;
n2=t;
}
a=n1;
b=n2;
while(b!=0){/*利用輾除法,直到b為0為止*/
t=a%b;
a=b;
b=t;
}
printf("最大公約數為:%d ",a);
printf("最小公倍數為:%d ",n1*n2/a);
}}
(9)編程求最大公約數和最小公倍數擴展閱讀
C語言求最大公約數輾轉相除法
#include<stdio.h>
intgcd(intm,intn);//將輾轉相除的過程封裝為函數,使主函數結構清晰。
intmain(void)
{
inta,b;
while(~scanf("%d%d",&a,&b)){//多組數據輸入時的方式之一與while(scanf("%d%d",&a,&b)!=EOF)用途相同
printf("%d ",gcd(a,b));
return0;
}
intgcd(intm,intn)
{
returnn?gcd(n,m%n):m;//此函數將輾轉相除的過程以遞歸的形式呈現,簡化程序屬於常規套路。
}
10. [C語言]編程:輸入兩個正整數,求其最大公約數和最小公倍數
程序如下:
main(){
int a,b,r,gcd,lcm;
printf("請輸入兩個正整數:");
scanf("%d%d",&a,%b);
while(r=a%b){
a=b;
b=r;
}
gcd=b;
lcm=a*b/gcd;
printf("gcd=%d,lcm=%d\n",gcd,lcm);
}
就是這樣。
有什麼問題請留言。