两个数的最大公因数
1.問題描述
給出兩個正整數,求他們的最大公約數
2.問題分析
算法1:連續整數檢驗法(窮舉法)
d=min{m,n}
如果m與n能同時整除d,則d是兩個數的最大公約數。
否則,若任一條件不成立,d=d-1,直到能同時整除。 eg:12與9,將9賦給d,12不能整除9,則d-1為8. 12與9均不能整除8,d=d-1. 直到d=3,12與9都能整除3,則3為12與9的最大公因數。 #include<stdio.h> int f(int m,int n){int d;if(m<n)d=m;else d=n;while(d>0){if(m%d==0&&n%d==0)return d;d--;}}int main() {int m,n;printf("請輸入兩個正整數:"); scanf("%d %d",&m,&n);printf("這兩個數的最大公約數為:%d ",f(m,n));}
算法2:歐幾里得算法
1.d=m%n;
2.循環直到r=0; d=m%n;
?? m=n;
?? n=d; 3.返回m. eg:d為m與n的模。 d=12%9=3; m=n=9; n=d=3; 繼續循環; d=9%3=0; m=n=3; n=d=0; 跳出循環。返回m值,為最大公因數。 #include<stdio.h> int f(int m,int n) {int d;while(d!=0){d=m%n;m=n;n=d;}return m; } int main() {int m,n;printf("請輸入兩個正整數:"); scanf("%d %d",&m,&n);printf("這兩個數的最大公約數為:%d ",f(m,n));}
算法3:連續相減法 輸入兩個正整數a,b 如果a>b,a=a-b; 否則b=b-a; 直到a=b輸出a或者b; eg:a=12,b=9,a=12-9=3; b>a,b=b-a=9-3=6; b=b-a=6-3=3; b=a,跳出循環,所以a或b為最大公因數。 #include<stdio.h> #include<math.h> int f(int m,int n) {m=abs(m); //abs絕對值函數,需要導入<math.h>包 n=abs(n); //用絕對值防止萬一出現負數的情況 while(m!=n){if(m>n)m=m-n;else n=n-m; } return m;} int main() {int m,n;printf("請輸入兩個正整數:"); scanf("%d %d",&m,&n);printf("這兩個數的最大公約數為:%d ",f(m,n));}
???
給出兩個正整數,求他們的最大公約數
2.問題分析
算法1:連續整數檢驗法(窮舉法)
d=min{m,n}
如果m與n能同時整除d,則d是兩個數的最大公約數。
否則,若任一條件不成立,d=d-1,直到能同時整除。 eg:12與9,將9賦給d,12不能整除9,則d-1為8. 12與9均不能整除8,d=d-1. 直到d=3,12與9都能整除3,則3為12與9的最大公因數。 #include<stdio.h> int f(int m,int n){int d;if(m<n)d=m;else d=n;while(d>0){if(m%d==0&&n%d==0)return d;d--;}}int main() {int m,n;printf("請輸入兩個正整數:"); scanf("%d %d",&m,&n);printf("這兩個數的最大公約數為:%d ",f(m,n));}
算法2:歐幾里得算法
1.d=m%n;
2.循環直到r=0; d=m%n;
?? m=n;
?? n=d; 3.返回m. eg:d為m與n的模。 d=12%9=3; m=n=9; n=d=3; 繼續循環; d=9%3=0; m=n=3; n=d=0; 跳出循環。返回m值,為最大公因數。 #include<stdio.h> int f(int m,int n) {int d;while(d!=0){d=m%n;m=n;n=d;}return m; } int main() {int m,n;printf("請輸入兩個正整數:"); scanf("%d %d",&m,&n);printf("這兩個數的最大公約數為:%d ",f(m,n));}
算法3:連續相減法 輸入兩個正整數a,b 如果a>b,a=a-b; 否則b=b-a; 直到a=b輸出a或者b; eg:a=12,b=9,a=12-9=3; b>a,b=b-a=9-3=6; b=b-a=6-3=3; b=a,跳出循環,所以a或b為最大公因數。 #include<stdio.h> #include<math.h> int f(int m,int n) {m=abs(m); //abs絕對值函數,需要導入<math.h>包 n=abs(n); //用絕對值防止萬一出現負數的情況 while(m!=n){if(m>n)m=m-n;else n=n-m; } return m;} int main() {int m,n;printf("請輸入兩個正整數:"); scanf("%d %d",&m,&n);printf("這兩個數的最大公約數為:%d ",f(m,n));}
???
轉載于:https://www.cnblogs.com/laurarararararara/p/10886455.html
總結
- 上一篇: 2019年十二周总结
- 下一篇: 用NiceTool在微信浏览器中下载AP