生活随笔
收集整理的這篇文章主要介紹了
求n个数的最大公因数和最小公倍数(c)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
設計要點
可以通過反復求兩個正整數的最大公因數和最小公倍數的方法來實現。
規定(a,b)為a,b的最大公因數,{a,b}為最小公倍數。
對于3個或3個以上的正整數,最大公約數與最小公倍數有以下性質:
(al,a2.a3)=((al,a2),a3)。
(al,a2.a3,a4)=((al,a2,a3),a4),...
{al,a2,a3}=({al,a2},a3}。
{al,a2,a3,a4}={{al,a2,a3},a4},...
應用這一性質,要求n個整數的最大公約數,先求出前n-1個整數的最大公約數b,再求第n個數與b的最大公約數:
要求n個整數的最小公倍數,先求出前n-1個整數的最小公倍數b,再求第n個數與b的最小公倍數。求n個數的最大公約數。
為便于輸出,設置m數組:
1)輸入的n個正整數存儲在m數組m[0],m[1],...,m[n-1]中。
2),開始時b=m[0],即輸入的第一個數賦值給變量b。
3)進入k循環,每次把輸入的數m[1]~m[n-1]賦值給a求得a、b的最大公約數c。如果c=l,退出循環,即m數組的最大公約數為1:否則賦值給b,即b=c,為下一輪運算做準備。求n個數的最小公倍數與上述類似。
*代碼*
#include <stdio.h>int main() {int n
;long a
, b
, c
, r
, m
[100];scanf("%d", &n
);for (int i
= 0; i
< n
; i
++)scanf("%ld", &m
[i
]);b
= m
[0];for (int i
= 1; i
< n
; i
++) {a
= m
[i
];if (a
< b
) {c
= a
;a
= b
;b
= c
;}for (c
= b
; c
>= 1; c
--)if (a
% c
== 0 && b
% c
== 0)break;if (b
== 1)break;b
= c
; }printf("最大公因數:%ld\n", c
);b
= m
[0];for (int i
= 1; i
< n
; i
++) {a
= m
[i
];if (a
< b
) {c
= a
;a
= b
;b
= c
;}for (c
= a
; c
<= a
* b
; c
+= a
) if (c
% b
== 0) break;b
= c
; }printf("最小公倍數:%ld\n", c
);return 0;
}
總結
以上是生活随笔為你收集整理的求n个数的最大公因数和最小公倍数(c)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。